- 思路:
- 考虑特殊情况
- 栈(stack)来存储未配对的符号
- 指针移动,如果和栈顶匹配,则弹栈
- 指针移动,如果和栈顶不匹配,且属于给定的符号,则压栈
- 终止条件为,遍历结束,栈空
class Solution {
public boolean isValid(String s) {
// corner case 1
if (s == null || s.length() == 0)
return true;
// corner case 2
if (s.length() % 2 != 0)
return false;
// <k,v> to store parentheses paris
HashMap<Character,Character> pairs = new HashMap<>();
pairs.put('{','}');
pairs.put('[',']');
pairs.put('(',')');
// List as a stack
List<Character> stack = new ArrayList<>();
// convert String to char array
char[] chars = s.toCharArray();
// iterate the char array
for (char c:chars){
int top_index = stack.size()-1;
// if stack is empty, just add
if (top_index == -1){
if (pairs.containsKey(c))
stack.add(c);
} else {
// if is a pair,delete the top element of the stack
if (pairs.get(stack.get(top_index)) == c){
stack.remove(top_index);
}else{
if (pairs.containsKey(c)){
stack.add(c);
}
}
}
}
// if the stack size is 0, valid. Otherwise, not valid
return stack.size() == 0;
}
}