目录
1 - 思路
判断有效括号使用【栈】这一数据结构解决。利用栈的先进后出从左到右遍历括号。
2 - 解题方法
①情况一
当字符串的长度是奇数时,此时不需进行其他判断,即可得出该序列不是有效括号。
②情况二
从左到右遍历括号
i 当遇到左括号时,入栈。
i 当遇到右括号时,让其与栈顶的左括号匹配(同类型括号可闭合),
ii 若匹配则出栈,继续遍历括号;
ii 若不匹配,则返回false,该字符串序列不是有效括号序列。
i 遍历直到栈为空,即所有的左括号都找到了对应的右括号,该字符串序列为有效括号序列。
3 - 复杂度
①时间复杂度:O(n)
②空间复杂度:O(n)
4 - Code
char paris(char ch) { if(ch==']')return '['; if(ch=='}')return '{'; if(ch==')')return '('; else return false; } bool isValid(char * s) { int n = strlen(s); if(n%2!=0) return false; char ch; int i,top=0;; char str[n+1]; for(i=0;i<n;i++) { ch=paris(s[i]); if(ch) { if(top==0 || str[top-1]!=ch) return false; else top--; } else { str[top++]=s[i]; } } return top==0; }
5 - 总结
题目简单,不过题解的细节还是值得学习。
一是s长度为奇数时可以直接排除。
二是可以用哈希表实现快速配对(而不是写一堆switch和if else)。