LeetCode解题笔记 5 —— 20.有效的括号
题目
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
解法
class Solution {
public boolean isValid(String s) {
s = s.replace("\"",""); //不知道为什么题目的输入带有双引号和斜杠,先把这些非括号去掉
s = s.replace("\\" , "");
if(s.isEmpty()){
return true;
}
Map<Character,Character> map = new HashMap<>();
map.put(']','[');
map.put('}','{');
map.put(')','(');
List<Character> list = new ArrayList<>();
int length = s.length();
for(int i = 0; i < length; i++){
char c = s.charAt(i);
if(map.containsKey(c)){//为右括号,在列表中取出最后一个字符进行匹配
if(list.isEmpty()){
return false;
}
if(list.remove(list.size()-1) != map.get(c)){
return false;
}
}else{//为左括号,添加进列表
list.add(c);
}
}
return list.isEmpty(); //若列表为空,即表示所有括号都闭合
}
}
官方的解法是使用队列Stack而不是List,但我测试了下似乎使用List更快