题目描述:
解法:栈
每当遇到左括号,就把这个左括号放入栈中,每当遇到右括号时,首先要判断栈是否为空,如果为空说明无效,如果不为空,就拿栈顶元素与当前右括号进行匹配,判断是否有效。
栈顶元素和右括号匹配时我们可以用一个Map作为映射关系。
map.put( ‘(’ , ‘)’ );
map.put( ‘{’ , ‘}’ );
map.put( ‘[’ , ‘]’ );
代码:
class Solution {
public boolean isValid(String s) {
boolean rest = true;//返回结果
Stack<Character> stack = new Stack<>();
Map<Character,Character> map = new HashMap<>();
map.put('(', ')');
map.put('{', '}');
map.put('[', ']');
for(char c:s.toCharArray()){
if(c == '(' || c == '{' || c == '['){
stack.push(c);
} else if(stack.empty() || map.get(stack.pop()) != c){
rest = false;
break;
}
}
//如果最后栈不为空(说明最后遍历完了还有左括号没有与之对应的右括号进行匹配)无效
return stack.empty() ? rest:false;
}
}