题目:https://leetcode-cn.com/problems/valid-parentheses/
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
我的方法一:栈
如果是左括号那么压栈,如果是右括号,然后比较和栈顶的左括号是否是一对,如果不是,那么无效
边界条件
这个题比较简单,主要需要考虑几个边界情况
- 可能出现右括号时,栈为空,说明没有对应的左括号,不合法
- 当遍历完了所有的括号后,可能栈不为空,说明左括号的数量多于右括号,也不合法
代码
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
int n = s.size();
const char* str = s.c_str();
for(int i = 0; i < n; i++) {
if(str[i] == '(' || str[i] == '[' || str[i] == '{'){
stk.push(str[i]);
}else{
if(s.empty()){
return false;
}
if (str[i] == ')'){
if(stk.top() != '('){
return false;
}else{
stk.pop();
}
}else if (str[i] == '}'){
if(stk.top() != '{'){
return false;
}else{
stk.pop();
}
}else if (str[i] == ']'){
if(stk.top() != '['){
return false;
}else{
stk.pop();
}
}
}
}
return stk.empty();
}
};
其他方法
优化点,判断是否是偶数
如果是奇数,肯定不合法,所以一个很好的优化
网友评论