1.题目
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1)左括号必须用相同类型的右括号闭合。
2)左括号必须以正确的顺序闭合。
3)每个右括号都有一个对应的相同类型的左括号。
2.示例
1)示例 1:
输入:s = “()”
输出:true
2)示例 2:
输入:s = “()[]{}”
输出:true
3)示例 3:
输入:s = “(]”
输出:false
3. 分析
就是一道栈的经典题目,想不明白我为啥高一刚学的时候有点不明白,可能是当时头脑没发育完全
4.代码
class Solution {
public:
bool isValid(string s) {
stack<char> q;
for(int i=0;i<s.size();i++){
if(i==0) {
if(s[i]=='('||s[i]=='{'||s[i]=='[') q.push(s[i]);
else return false;
}
else{
if(s[i]=='('||s[i]=='{'||s[i]=='[') q.push(s[i]);
else{
if(q.empty()) return false;
if(s[i]==')'){
if(q.top()!='(') return false;
q.pop();
}
else{
if(s[i]=='}'){
if(q.top()!='{') return false;
q.pop();
}
else{
if(q.top()!='[') return false;
q.pop();
}
}
}
}
}
if(!q.empty()) return false;
return true;
}
};