栈的理解:判断字符串是否合法

转载:https://www.baidu.com/link?url=6dW_u9HhpUQOnqOhVax4fk01dBCAcES1y8oQZBxfaIK2Agc7VaEZ2sy_f8xowxw_xAl8NVzS_WdBUWvK9WrjUq&wd=&eqid=c21b6e190005af5d000000055e8dbd2d

思想:对于栈这种数据结构的理解与应用
题目:只包含六中字符组合的字符串类型,判断一个这样组合的字符串是否合法?
“[{}]”                :合法的 
“((([{}])))”          :合法的
“]{}()[”              :不合法的 
“((([]))}”            :不合法的 
代码:
 public boolean isValid(String s) {
     //创建一个栈类型数据储存结构,规定泛型为Character;
        Stack<Character> ns=new Stack<Character>();
     //创建一个Map类型来一一对应并规定(),{},[]成双的关系表示;
        Map<Character,Character> m=new HashMap<Character,Character>();
     //因为这里键值与value都是唯一的,所以不用Map也可以,但为了体现这个关系,最好用.
        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();
    }
解析:栈这种类型数据是:“先进后出的”;
结题思路:如果是(,{,[就压入栈中,如果是),},]就不用压并取出栈顶元素.如果取出的元素与刚刚的元素不是一对的话,就说明不合法!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值