题意:给出(,[,{,),],}括号组成的字符串, 判断括号是否匹配
思路:用栈结构判断
1、如果是(,[,{,将其入栈
2、如果遇到),],},看栈是否为空、栈顶元素是否对应为(,[,{
3、将字符串遍历完后,判断栈是否为空
具体代码如下:
public class Solution
{
private boolean isLeft(char ch) {
switch(ch) {
case '(':
case '[':
case '{':
return true;
default:
return false;
}
}
public boolean isValid(String s) {
Stack<Character> chStack = new Stack<>();
Map<Character, Character> map = new HashMap<>();
map.put(')', '('); map.put(']', '['); map.put('}', '{');
for (int i = 0; i < s.length(); i++) {
if (isLeft(s.charAt(i))) {
chStack.add(s.charAt(i));
} else if (map.containsKey(s.charAt(i))) {
if (chStack.isEmpty() || chStack.peek() != map.get(s.charAt(i))) return false;
else chStack.pop();
}
}
return chStack.isEmpty();
}
}