力扣热题:20.有效的括号
开篇
这道题读懂题目不难,就是些代码的时候,会发现需要判断的情况比较多
题目链接:20.有效的括号
题目描述
解题思路
1.利用哈希表map来匹配左右括号 2.创建list集合来保存左括号,如果出现右括号,则删除对应的左括号,如果没有对应的括号,则无效 3.如果最后list为空,则有效;如果不为空,则无效
代码纯享版
class Solution {
public boolean isValid(String s) {
if(s.length() % 2 != 0) return false;
Map<Character, Character> map = new HashMap<>();
map.put('(',')');
map.put('{','}');
map.put('[',']');
List<Character> list1 = new ArrayList<>();
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[') list1.add(s.charAt(i));
else if(list1.size() != 0 &&map.get(list1.get(list1.size() - 1)) == s.charAt(i)){
list1.remove(list1.size() - 1);
}
else return false;
}
if(list1.size() == 0) return true;
else return false;
}
}
其它解法
这种方法是的用栈来存储,由于只学了c的数据结构,java的数据结构还没学,所以没有使用
class Solution {
private static final Map<Character,Character> map = new HashMap<Character,Character>(){{
put('{','}'); put('[',']'); put('(',')'); put('?','?');
}};
public boolean isValid(String s) {
if(s.length() > 0 && !map.containsKey(s.charAt(0))) return false;
LinkedList<Character> stack = new LinkedList<Character>() {{ add('?'); }};
for(Character c : s.toCharArray()){
if(map.containsKey(c)) stack.addLast(c);
else if(map.get(stack.removeLast()) != c) return false;
}
return stack.size() == 1;
}
}