给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
思路:
代码思路比较简单,遇到左括号压栈,遇到右括号则从栈中弹出一个元素,用其相对应的括号与遇到的右括号比较即可。同时排除特殊情况,如果括号的个数为奇数一定不满足,如果已经遍历完但是栈不为空,说明有左括号没有匹配,也不满足
具体代码
class Solution {
public boolean isValid(String s) {
if(s.length()%2==1)return false;
Stack<Character> stack = new Stack();
for(int i = 0; i<s.length(); i++){
if(s.charAt(i)=='('||s.charAt(i)=='['||s.charAt(i)=='{'){
stack.push(s.charAt(i));//遇到左括号压入
}
//遇到右括号
else{
if(stack.isEmpty())return false;//没有与之匹配的左括号
char ch = stack.pop();
if(ch=='('){
if(s.charAt(i)!=')')return false;
}else if(ch=='{'){
if(s.charAt(i)!='}')return false;
}else{
if(s.charAt(i)!=']')return false;
}
}
}
//遍历完,如果还有左括号就返回false
if(!stack.isEmpty())return false;
return true;
}
}