题目描述:
标签:栈 字符串
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
代码:
思路分析:
1、特殊分析:括号成双成对,字符串长度一定为偶数,所以长度为奇数的字符串一定不是有效括号字符串。
2、建一个栈,遇到左括号时压入栈中,遇到右括号时,判断此时栈是不是空或者栈顶的括号是否配对,如果真则返回false,如果假则将栈顶的元素弹出与当前右括号配对。
3、最后判断栈是否为空,来看所有括号是否都配对完,如果为空说明该字符串是有效括号字符串。
class Solution {
public boolean isValid(String s) {
int n = s.length();
if(n % 2 == 1){
return false;
}
Map<Character,Character> pairs = new HashMap<Character,Character>();
pairs.put(')','(');
pairs.put('}','{');
pairs.put(']','[');
Stack<Character> stack = new Stack<Character>();
for(int i = 0;i < n;i++){
Character ch = s.charAt(i);
if(pairs.containsKey(ch)){
if(stack.isEmpty() || stack.peek() != pairs.get(ch)){
return false;
}
stack.pop();
}else{
stack.push(ch);
}
}
return stack.isEmpty();
}
}