转载:https://www.baidu.com/link?url=6dW_u9HhpUQOnqOhVax4fk01dBCAcES1y8oQZBxfaIK2Agc7VaEZ2sy_f8xowxw_xAl8NVzS_WdBUWvK9WrjUq&wd=&eqid=c21b6e190005af5d000000055e8dbd2d
思想:对于栈这种数据结构的理解与应用
题目:只包含六中字符组合的字符串类型,判断一个这样组合的字符串是否合法?
“[{}]” :合法的
“((([{}])))” :合法的
“]{}()[” :不合法的
“((([]))}” :不合法的
代码:
public boolean isValid(String s) {
Stack<Character> ns=new Stack<Character>();
Map<Character,Character> m=new HashMap<Character,Character>();
m.put(')','(');
m.put('}','{');
m.put(']','[');
for(int i=0;i<s.length();i++){
char tmp=s.charAt(i);
if(tmp=='(' || tmp=='{' || tmp=='[') {
ns.push(s.charAt(i));
}else{
char temp=m.get(tmp);
if(ns.isEmpty()){
return false;
}
if(temp!=ns.pop()){
return false;
}
}
}
return ns.isEmpty();
}
解析:栈这种类型数据是:“先进后出的”;
结题思路:如果是(,{,[就压入栈中,如果是),},]就不用压并取出栈顶元素.如果取出的元素与刚刚的元素不是一对的话,就说明不合法!