给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
利用堆栈stack与hashmap进行判断,思路如下:
1.判断是否为空串。
2.判断s.length是否是偶数(奇数肯定错误)
3.判断括号的顺序,
(1)首先把括号放到HashMap中,key放左括号,value放右括号;
(2)遍历字符串s,把左括号push到堆栈,右括号与最接近的左括号(栈顶的元素)匹配,成功继续循环,并pop栈顶左括号,失败则false;
(3)注意堆栈中左括号的数量。
代码如下:
public boolean isValid(String s) {
if(s.length()==0)return true;
if(s.length() % 2 != 0)return false;
Stack<Character> stack=new Stack<Character>();
HashMap<Character,Character> map=new HashMap<Character,Character>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
for(Character c:s.toCharArray()) {
if(map.containsKey(c)) { //左括号压入堆栈
stack.push(c);
}else {
if(stack.isEmpty())return false; //右括号匹配
char current=stack.pop();
if(map.get(current) != c)return false;
}
}
return stack.isEmpty();
}
总结:要尽可能的利用数据结构。