题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
思路:
栈,遍历字符串,遇到左括号压入右括号,遇到右括号时判断栈是否为空,反之判断与栈顶是否匹配,不匹配则肯定无效,空栈压入右括号也无效,遍历完成后若栈为空则有效。空栈说明前面已经匹配了,遇到右括号后续自然无效,栈顶不匹配括号该左括号无法消除。利用栈就像泡泡龙一样,匹配则成对消除,缺点也很明显内存消耗大。
C++源码:
class Solution {
public:
bool isValid(string s) {
stack<int> StackS; //创建栈
if (s.size() % 2 != 0) //排除奇数个
return false;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(')
StackS.push(')');
else if (s[i] == '{')
StackS.push('}');
else if (s[i] == '[')
StackS.push(']');
else if (StackS.empty() || StackS.top() != s[i]) //空栈遇右括号或栈顶不匹配
return false;
else //匹配出栈
StackS.pop();
}
return StackS.empty();
}
};