题目编号20:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
1、用栈数据结构解决
思路:每一个右括号的出现都要和栈顶的左括号匹配,否则就不是有效的字符串
class Solution {
private Map<Character,Character> map = new HashMap<>();
public Solution(){
map.put(')','(');
map.put('}','{');
map.put(']','[');
}
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i=0;i<s.length();i++){
if (map.containsKey(s.charAt(i))){
//如果包含,说明是反括号,应该出栈
char topElement = stack.empty() ? '#' : stack.pop();
if (topElement != map.get(s.charAt(i))){
return false;
}
}else {
//不包含,说明是正括号,应该压栈
stack.push(s.charAt(i));
}
}
return stack.empty();
}
}