转载:https://www.baidu.com/link?url=6dW_u9HhpUQOnqOhVax4fk01dBCAcES1y8oQZBxfaIK2Agc7VaEZ2sy_f8xowxw_xAl8NVzS_WdBUWvK9WrjUq&wd=&eqid=c21b6e190005af5d000000055e8dbd2d
思想:对于栈这种数据结构的理解与应用
题目:只包含六中字符组合的字符串类型,判断一个这样组合的字符串是否合法?
“[{}]” :合法的
“((([{}])))” :合法的
“]{}()[” :不合法的
“((([]))}” :不合法的
代码:
public boolean isValid(String test) {
//创建一个栈类型数据储存结构,规定泛型为Character;
Stack<Character> ns=new Stack<Character>();
//创建一个Map类型来一一对应并规定(),{},[]成双的关系表示;
Map<Character,Character> map=new HashMap<Character,Character>();
map.put(')','(');
map.put('}','{');
map.put(']','[');
for(int i=0;i<test.length();i++){
//将字符串转化为字符数组
char temp=test.charAt(i);
//因为(,{,[总是在另一半的前面
if(temp=='(' || temp=='{' || temp=='[') {
//将字符压入栈中
ns.push(test.charAt(i));
}else{
//获取现在该字符的另一半配对的字符元素,通过键值获得value值
char topStack=map.get(temp);
//判断是否栈空了,栈空了说明该元素永远对配不了对,进而说明该字符串不合法
if(ns.isEmpty()){
return false;
}
//判断两者字符是否相等
if(topStack!=ns.pop()){
return false;
}
}
}
return ns.isEmpty();
}
解析:栈这种类型数据是:"先进后出的";
解题思路:如果是(,{,[就压入栈中,如果是),},]就不用压并取出栈顶元素.如果取出的元素与刚刚的元素不是一对的话,就说明不合法!