20. 有效的括號

題目:

給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。

有效字符串需滿足:

左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。

示例 1:

輸入: "()"
輸出: true
示例 2:

輸入: "()[]{}"
輸出: true
示例 3:

輸入: "(]"
輸出: false

思路:

這個問題是典型的棧在括號匹配中的應用問題。

1.若當前遍歷的字符爲正括號則入棧

2若當前遍歷的字符爲反括號則查看棧頂元素是不是對應的正括號,

      2.1若是,則棧頂元素出棧,繼續遍歷

      2.2若不是,則直接返回false

3.遍歷完成後,判斷棧是否爲空,即棧頂是否指向-1,若是則返回true,否則返回false

代碼:

class Solution {
    public boolean isValid(String s) {
        int top = -1;
        char[] stack = new char[s.length()];
        for(int i=0;i<s.length();i++){
            char c = s.charAt(i);
            if(c=='('||c=='['||c=='{'){
                stack[++top] = c;
            }else if(top==-1){
                return false;
            }else if((c==')'&&stack[top]=='(')||(c==']'&&stack[top]=='[')||(c=='}'&&stack[top]=='{')){
                top--;
            }else{
                return false;
            }
        }
        if(top == -1){
            return true;
        }
        return false;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章