LeetCode20:
class Solution {
public boolean isValid(String s) {
//判断s长度符合本问题,s长度要大于等于2
if(s.length()<=1) return false;
//添加(key,value)到map
Map<Character,Character> map=new HashMap<>();
map.put('(',')');
map.put('[',']');
map.put('{','}');
//构建对应map类型的栈
Stack<Character> stack=new Stack<>();
//遍历s
for(int i=0;i<s.length();i++){
char item=s.charAt(i);
//遇到左边的key就直接入栈
if(map.containsKey(item)){
stack.push(item);
}
//遇到右边的value就与栈顶元素进行比较
else {
if(!stack.isEmpty()){
Character left=stack.pop();
char right=map.get(left);
if(item!=right){
return false;
}
}else{
return false;
}
}
}
return stack.isEmpty();
}
}
map.get()返回value就可以进行比较map中原定的key--vlaue匹配。
最后返回stack.iseEmpty(),stack为空,就说明全部匹配。我们只对key进行入栈,遇到非key的字符,就与栈顶元素进行比较,成功匹配后,此时stack就是空,匹配不成功,就返回false了。