20. 有效的括号¶
难度:简单
题目¶
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
题解¶
使用栈模拟匹配过程
- 遇到左括号时入栈;
- 遇到右括号时,检查栈顶括号是否与右括号匹配,若匹配则出栈,否则返回
false
; - 完成匹配过程后检查栈是否为空,若为空返回
true
,否则返回false
。
bool isValid(char * s){
int maxLen = strlen(s), top = 0;
char *holding = malloc(sizeof(char) * maxLen), *cur = s;
while(*cur)
{
switch(*cur)
{
case '(':
case '[':
case '{':
holding[top] = *cur;
top++;
break;
case ')':
if (top == 0 || holding[top - 1] != '(')
return false;
top--;
break;
case ']':
case '}':
if (top == 0 || holding[top - 1] != (*cur) - 2)
return false;
top--;
break;
}
cur++;
}
return !top;
}