括号匹配用栈是解决是最简单那的。
遇到左括号就入栈。遇到右括号就出栈,然后看是否匹配。这里再用一个map把括号数字化会更简单。
class Solution {
public:
bool isValid(string s) {
map<char,int> m={
{'(',1},{')',-1},
{'{',2},{'}',-2},
{'[',3},{']',-3}
};
int flag =1;
stack<int> a;
for(int i =0 ;i<s.size();i++){
int t=m[s[i]];
if(t>0){
a.push(t);
}else{
if(a.empty()){
flag=0;
break;
}else{
int x=a.top()+t;
if(x!=0){
flag=0;
break;
}
a.pop();
}
}
}
if(!a.empty()) flag=0;
if(flag){
return true;
}else{
return false;
}
}
};
第一次写leetcode有点不适应。
结果:
标签:20,int,C++,else,括号,flag,empty From: https://www.cnblogs.com/llllmz/p/17972588