给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.每个右括号都有一个对应的相同类型的左括号。
思路:从题意中可以看出,右括号")" "}" "]" 匹配需要离它最近的左括号来进行匹配,因此可以定义一个栈来实现(栈是先进后出)
public boolean isValid(String s) {
if(s == null || s.length() == 0){
return false;
}
//{()[()]}
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()){
if(c == '{'){
stack.push('}');
}
else if(c == '['){
stack.push(']');
}
else if(c == '('){
stack.push(')');
}
//s1="()]", 遇到] 判断s.isEmpty()为空,返回false
else if(stack.isEmpty() || c != stack.pop()){ //字符c为右括号时出栈,判断出栈的元素是否和字符c相同
return false;
}
}
return stack.isEmpty();
}