给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路比较简单,就是用栈。
这里用map存了括号的配对,这里在new的时候进行了初始化赋值,可以记住这个用法。这里的双{}
是用的匿名内部类,第一个括号为匿名内部类,第二个括号为实例初始化块。
这种写法代码比较简单,但执行效率比普通初始化低。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution {
private static final Map<Character,Character> map = new HashMap<Character,Character>(){{ put('}','{'); put(']','['); put(')','('); }};
public boolean isValid(String s) { int len = s.length(); char[] c = s.toCharArray(); int idx = 0; LinkedList<Character> stack = new LinkedList<>(); for (int i = 0; i < len; i++) { if (map.containsKey(c[i])) { if (stack.isEmpty() || stack.peek() != map.get(c[i])) { return false; } stack.pop(); } else { stack.push(c[i]); } } return stack.isEmpty(); } }
|