1.题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
2.思路分析
这个题,我上编译原理课的时候,有做过类似的工作,所以印象比较深。我们大致要考虑到一下几个点:
①为了判断一致性,我们可以用HashMap来存放一堆括号
②在判断的开始:
(1)字符串的长度一定要是2的倍数
(2)一定是要先有左括号,再有右括号
③这种先进后比较的方式,————栈结构
(1)如果当前是左括号,进栈
(2)如果当前是右括号,出栈,进行比较
(3)判断完所有的字符,如果栈中没有元素,则返回true
注意:这里有一个空指针异常,如果当前是右括号,没有元素能够出栈,预先判断!
3.代码实现
public boolean isValid(String s) {
if(s.length()%2!=0)return false;
boolean flag = true;
Map<Character, Character> hashMap = new HashMap<>();
hashMap.put('(', ')');
hashMap.put('[', ']');
hashMap.put('{', '}');
Stack<Character> stack = new Stack();
for (int i = 0; i < s.length(); i++) {
if(stack.isEmpty()&&!hashMap.containsKey(s.charAt(i))){
flag=false;
return flag;
}
if(hashMap.containsKey(s.charAt(i))){
stack.push(s.charAt(i));
}else{
if(hashMap.get(stack.pop())==s.charAt(i)){
continue;
}else {
flag=false;
return flag;
}
}
}
if(!stack.isEmpty()){
flag=false;
}
return flag;
}
网友评论