使用栈,遇到右括号就出栈,遇到左括号就进栈。最后,判断栈是否为空,从而返回相应结果。
以左括号为值,右括号为键进行存储到map中,方便判断遇到的是哪个括号,以及是该括号的左半部分还是右半部分。由此,确定左右括号的办法,就是与map中存储的值键进行比对。
遇到右括号,且左括号与之匹配,则将左括号出栈;反之,返回false。
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
// 使用栈,遇到右括号就出栈,遇到左括号就进栈
Map<Character, Character> map = new HashMap<>();
map.put(']', '[');
map.put('}', '{');
map.put(')', '(');
Deque<Character> stack = new ArrayDeque<>();
for (int i = 0; i < s.length(); ++i) {
Character ch = s.charAt(i);
if (map.containsKey(ch)) {
// 避免全右
// 如果遇到右括号时,栈内没有元素,说明没有左括号,返回false
if (stack.isEmpty()) {
return false;
} else if (map.get(ch).equals(stack.peekFirst())) {
stack.removeFirst();
} else {
return false;
}
} else {
stack.addFirst(ch);
}
}
// 避免全左
return stack.isEmpty();
}
}

京公网安备 11010502036488号