题目
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路
1. 栈
- 如遇到左边符号,入栈
- 遇到右边符号,判断栈是否为空,否的话判断栈顶元素是否与当前元素对应,否,false; 是,弹出栈顶元素。
class Solution {
public boolean isValid(String s) {
if (s.length() % 2 != 0) return false;
char[] sArray = s.toCharArray();
Map<Character, Character> paraMap = new HashMap<>(){
{
put('(', ')');
put('{', '}');
put('[', ']');
}
};
Stack<Character> paraStack = new Stack<>();
for(char c : sArray){
if (paraMap.containsKey(c)){
paraStack.push(c);
}else if (paraStack.empty() || paraMap.get(paraStack.peek()) != c ){
return false;
}else{
paraStack.pop();
}
}
return paraStack.empty();
}
}