有效的括号
1,2两种情况在遍历的时候要考虑。
3 情况在最后考虑。
另外就是要分明:遇到左括号怎么办?遇到右括号怎么办?要分开来说明。
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class youxiaokuohao{
public static void main(String[] args){
Solution so = new Solution();
System.out.println(so.isValid("()"));;
}
}
//栈用来存放遍历时遇到的左括号。
//遍历的时候,栈空或者不匹配则返回false。
//遍历完了,栈不空则返回false。
class Solution {
Stack <Character>sta = new Stack<>();
Map<Character,Character> map = new HashMap<>();
public Solution(){
map.put(')','(');
map.put(']','[');
map.put('}','{');
}
public boolean isValid(String s) {
if(s.length() % 2 != 0){
return false;
}
for(int i = 0;i<s.length();i++){
char ch = s.charAt(i);
if(ch == ')' || ch == ']' || ch == '}')/*等价于sta.containsKey(ch)*/ {
//遍历时候返回false的两种情况:
// 一种是不相等,
// 另一种是stack为空。其中stack为空这个也将一开始就存放右括号这种情况给排除在外了。
if (sta. isEmpty() == true || map.get(ch) != sta.pop()) {
return false;
}
}
else{
sta.push(ch);
}
}
return sta.isEmpty();
//3情况在这里考虑进去了
}
}