题目描述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
AC代码
class Solution {
public:
bool isValid(string s) {
int len = s.length();
//无元素情况
if (len == 0)
return false;
//有元素情况
stack<char>Stack; //创建栈
for (int i = 0; i < len; i++) {
char c = s[i];
if (c=='(' || c=='[' || c=='{') { //左边元素入栈
Stack.push(c);
}
else if (Stack.empty()) //右边元素前无左元素
return false;
else {//右边元素比对
char t = Stack.top(); //获取栈顶元素
Stack.pop();
if (!(c==')' && t=='(') && !(c==']' && t=='[') && !(c=='}' && t=='{'))
return false; //匹配不成功则失败
}
}
return Stack.empty(); //都匹配完成则成果,反之失败
}
};