lc20-有效的括号
class Solution {
public boolean isValid(String s) {
Stack<Character> a=new Stack<>();
for(Character c:s.toCharArray()){
if(c=='('||c=='['||c=='{'){
a.push(c);
}else if(!a.empty()&&c==')'&&a.peek()=='('){
a.pop();
}else if(!a.empty()&&c==']'&&a.peek()=='['){
a.pop();
}else if(!a.empty()&&c=='}'&&a.peek()=='{'){
a.pop();
}else {
return false;
}
}
if(a.size()==0) return true;
return false;
}
}
拓展1:如果不要求按顺序,比如([)]也可以怎么办:分别用n1,n2,n3记录,
int left = 0;
for (int i = 0; i < str.size(); i++) {
if (s[i] == '(') {
left++;
} else {
// 遇到右括号
left--;
}
// 右括号太多
if (left == -1)
return false;
}
// 是否所有的左括号都被匹配了
return left == 0;
拓展2:要求必须按 { [ ( 的顺序进行关闭,可以有连续的左括号或者右括号。