有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
思路:
利用栈先进后出的特性,遍历字符串,当遇到左括号时,直接入栈,遇到右括号时考虑出栈元素是否和相应的左括号对应。为了后面出栈代码好写,故在入栈是压入对应的右括号。
- 空串为有效字符串
- 奇位字符串不是有效字符串
- 遍历全部字符串,最后栈为空则所有括号都有对应,故为有效字符串
class Solution {
public:
bool isValid(string s) {
if(!s.size()) return true;
if(s.size() % 2 != 0) return false;
stack<char> stk;
for(char ch : s){
switch(ch){
case '(':
stk.push(')');break;
case '{':
stk.push('}');break;
case '[':
stk.push(']');break;
case ')':
case '}':
case ']':
if(!stk.empty() && stk.top() == ch) stk.pop();
else return false;
break;
default:
return false;
}
}
return stk.empty();
}
};