解题思路
20. 有效的括号
使用栈:遍历字符串,如果为左括号就入栈,为右括号就弹出栈顶元素,跟当前右括号对比,如果不匹配就返回false,遍历完整个字符串,如果全部匹配成功,那么此时栈中无元素
代码
class Solution {
//方法一:遍历字符串依次入栈,当遇到右括号就弹出栈顶,看是否与右括号对应。
public static boolean isValid(String s) {
Deque<Character> stack = new LinkedList<>();
for(int i=0 ; i<s.length() ; i++) {
char c= s.charAt(i);
switch(c) {
case ']':
if(stack.isEmpty() || (stack.pop())!='[') return false;
break;
case ')':
if(stack.isEmpty() || (stack.pop())!='(') return false;
break;
case '}':
if(stack.isEmpty() || (stack.pop())!='{') return false;
break;
default:
stack.push(c);
break;
}
}
return stack.isEmpty(); //遍历结束,全部匹配成功,那么栈为空
}
}
来自评论区大佬的逆向思维
class Solution {
public static boolean isValid(String s) {
Deque<Character>stack = new LinkedList<Character>();
for(char c: s.toCharArray()){
if(c=='(')stack.push(')');
else if(c=='[')stack.push(']');
else if(c=='{')stack.push('}');
else if(stack.isEmpty()||c!=stack.pop())return false;
}
return stack.isEmpty();
}
}