目录
1. 分析
首先要看明白第二点正确顺序,就是说{()}可以,但是{(})不可以。
那么我们就可以来分析,碰到的第一个右括号必须只能与最后一个左括号匹配才符合条件,然后消去两个括号继续比较。
符合 栈 的特点,后进先出。
2. java代码实现
说明:
栈有个特点就是栈为空出栈会报错,可以在栈中初始化一个字符。
private static final Map<Character, Character> map = new HashMap<>() {{
put('{', '}');
put('[', ']');
put('(', ')');
put('?', '?');
}};
public boolean isValid(String s) {
if (s.isEmpty() || s.length() % 2 != 0 ||
!map.containsKey(s.charAt(0)) ||
map.containsKey(s.charAt(s.length() - 1))) return false;
LinkedList<Character> stack = new LinkedList<>();
stack.add('?');
for(int i = 0; i< s.length(); i++) {
if(map.containsKey(s.charAt(i))) stack.addLast(s.charAt(i));
else {
if(s.charAt(i) != map.get(stack.removeLast())) return false;
}
}
return stack.size() == 1;
}