给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
我的思路:采用栈,如果是左括号则入栈,如果是右括号则跟栈顶(最后一个入栈的)匹配,如果匹配则将栈顶出栈,否则返回false
代码如下:
class Solution {
public boolean isValid(String s) {
Map<Character, Character> pairs = new HashMap<Character, Character>() {{
put(')', '(');
put(']', '[');
put('}', '{');
}};
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (pairs.containsValue(c)){
stack.push(c);
}
if (pairs.containsKey(c)){
if (stack.isEmpty()){
return false;
}else {
if (stack.peek() == pairs.get(c)){
stack.pop();
}else {
return false;
}
}
}
}
return stack.isEmpty();
}
}