Valid Parentheses

3.16看覃超的直播,他直接用了Java 的Stack 沒有用LinkedList模擬stack


這題看起來簡單,但它的條件:
"()" and "()[]{}" are all valid but "(]" and "([)]" are not.
不夠充足,它還需要滿足:([])這種是正確的,也就是數(shù)學公式里的那種。我一開始以為不能這么包含,出現(xiàn)一個,下一個必須就是前一個的配對,于是直接檢查了奇數(shù)偶數(shù)項是否配對;這樣是不對的。

正確的做法是要維護一個棧,獨到一個符號的時候看棧頂那個元素是不是跟它配對。棧對應的數(shù)據(jù)結構是LinkedList。

已犯錯誤:

  1.                if (stack.isEmpty() || !stack.pop().equals("(")) return false;
    

沒有判空。另外,pop是跟push一對的,offer和add是不能往棧里加東西的。

  1. 最后沒有判斷棧是否為空,而是判斷是否是len%2 == 0.
    public boolean isValid(String s) {
        int len = s.length();

        LinkedList<String> stack = new LinkedList<>();

        for (int i = 0; i < len; i++) {
            switch (String.valueOf(s.charAt(i))) {
                case "(":
                    stack.push("(");
                    break;
                case "{":
                    stack.push("{");
                    break;
                case "[":
                    stack.push("[");
                    break;
                case ")":
                    if (stack.isEmpty() || !stack.pop().equals("(")) return false;
                    break;
                case "}":
                    if (stack.isEmpty() || !stack.pop().equals("{")) return false;
                    break;
                case "]":
                    if (stack.isEmpty() || !stack.pop().equals("[")) return false;
                    break;
            }
        }

        return stack.isEmpty();
    }
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容