思路,依次将这些字符入栈,判断栈顶元素与当前元素是否是对应上的,是则pop,不是则入栈,到最后判断栈是否为空。
class Solution { public: bool isValid(string s) { stack<char> result; int n=s.size(); if(n==0) return true; for(int i=0;i<n;i++) { if(result.empty()) result.push(s[i]); else if(result.top()=='('&&s[i]==')'|| result.top()=='['&&s[i]==']'|| result.top()=='{'&&s[i]=='}') result.pop(); else result.push(s[i]); } return result.empty(); } };
别人的思路:
这种方法能够更快的判断不符合条件的字符串,不需要将字符串遍历完成。
class Solution {
public:
bool isValid(string s) {
stack<char> paren;
for (char& c : s) { //C++11中的range-based for(基于范围的循环)
switch (c) {
case '(':
case '{':
case '[': paren.push(c); break;
case ')': if (paren.empty() || paren.top()!='(') return false; else paren.pop(); break;
case '}': if (paren.empty() || paren.top()!='{') return false; else paren.pop(); break;
case ']': if (paren.empty() || paren.top()!='[') return false; else paren.pop(); break;
default: ; // pass
}
}
return paren.empty() ;
}
};
另外一种思路:
class Solution {
public:
bool isValid(string s) {
stack<char> result;
for(auto & a:s){ //C++11中的range-based for(基于范围的循环)
if(a=='(') result.push(')');
else if(a=='{') result.push('}');
else if(a=='[') result.push(']');
else if(result.empty()||result.top()!=a)//这里直接出栈判断
return false;
else result.pop();
}
return result.empty();
}
};
转自:https://blog.csdn.net/m0_37693059/article/details/76691491
如有不当之处,请联系我:[email protected]