1.题目
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
2.题解
我们遍历字符串中的所有字符
1,如果遇到了左括号,就把对应的右括号压栈(比如遇到了字符’(’,就把字符’)'压栈)。
2,如果遇到了右括号
1)查看栈是否为空,如果为空,说明不能构成有效的括号,直接返回false。
2)如果栈不为空,栈顶元素出栈,然后判断出栈的这个元素是否等于这个右括号,如果不等于,说明不匹配,直接返回false。如果匹配,就继续判断字符串的下一个字符。
3,最后如果栈为空,说明是完全匹配,是有效的括号,否则如果栈不为空,说明不完全匹配,不是有效的括号。
3.代码
public boolean isValid (String s) {
// if(s==null||s.length()==1||s.length()%2!=0){
// return false;
// }
Stack<Character> list = new Stack<>();
for (char c:s.toCharArray()) {
if(c=='('){
list.push(')');
}
else if(c=='['){
list.push(']');
}
else if(c=='{'){
list.push('}');
}
else if(list.isEmpty()||c!=list.pop()){
return false;
}
}
return list.isEmpty();
}