给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
注意空字符串可被认为是有效字符串。
思路:遇到左括号压栈,遇到右括号检测栈顶元素(首先判断该栈不为空)与右括号是否匹配,并将栈顶元素弹出。
class Solution {
public:
bool isValid(string s) {
std::stack<char> ss;
for (auto i = 0; i < s.size();i++)
{
switch (s[i])
{
case '(':ss.push(s[i]); break;
case '[':ss.push(s[i]); break;
case '{':ss.push(s[i]); break;
case ')':
if (ss.empty()||ss.top() != '(')
return false;
else
ss.pop(); break;
case ']':
if (ss.empty()||ss.top() != '[')
return false;
else
ss.pop(); break;
case '}':
if (ss.empty()||ss.top() != '{')
return false;
else
ss.pop(); break;
default:
break;
}
}
return ss.empty();
}
};