判斷字符串是否合法


轉載: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