判断字符串是否合法


转载: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();
    }
解析:栈这种类型数据是:"先进后出的";
解题思路:如果是(,{,[就压入栈中,如果是),},]就不用压并取出栈顶元素.如果取出的元素与刚刚的元素不是一对的话,就说明不合法!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM