题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2. 左括号必须以正确的顺序闭合。
解题思路 :利用栈的方法,将字符串拆分成字符然后遍历字符串,将左边的括号都存入栈内,再通过栈内的括号与后面遍历的括号一一对比。一共有五种情况,
第一种括号匹配,没有任何问题。
第二种,左边的括号和右边的括号数量一致,但是左右括号不匹配。
第三种情况,左边的括号数量比右边的多。
第四种情况,右边的括号数量比左边多。
还有一种情况是只有一个左括号或者右括号。
代码实现:
class Solution {
public boolean isValid(String s) {
Stack<Character>stack=new Stack<>();
if(s.length()<2){return false;}
for (int i = 0; i <s.length() ; i++) {
char ch = s.charAt(i);
if (ch=='{'||ch=='['||ch=='('){
stack.push(ch);
}
else{
if (stack.isEmpty()){
return false;//右括号多
}
char ch1 = stack.pop();
if (ch=='}'&&ch1!='{'||ch==']'&&ch1!='['||ch==')'&&ch1!='('){
return false;//左右括号不匹配
}
}
}
if(!stack.isEmpty()){
return false;//左括号多
}
return true;
}
}