Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
此题的目的在于判断给定的字符串是不是一串有效的组合。比如[]{()}是有效的组合。[)[]}是无效的组合。
思路:
1.取出字符串中的每个字符;
2.如果属于“([{”,则放入栈stack中,如果属于“)]}”,则取出栈顶的字符与当前字符进行比较;
3.若栈顶字符与当前字符相等,则栈顶字符出栈,继续下一个字符判断;
4.若栈顶字符与当前字符不相等,则直接返回false;
5.最后循环走完,则返回stack.empty(),而不是true;
这样判断是因为当字符串是“(”时,for循环压栈一次后就跳出循环,最后判断栈是否为空,为空,则返回true,否则返回false。
class Solution {
public:
bool isValid(string s) {
string left = "([{";
string right = ")]}";
stack<char> stack;
for(auto c : s){
if(left.find(c) != string::npos){//string::npos用来表示不存在的位置
stack.push(c);
}
else{
if(stack.empty() || stack.top() != left[right.find(c)]){
return false;
}
else{
stack.pop();
}
}
}
return stack.empty();
}
};