1. 程式人生 > 其它 >LeetCode——20. 有效的括號

LeetCode——20. 有效的括號

技術標籤:JAVAleetcode字串leetcode

題目描述:

給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。

示例 1:
輸入: “()”
輸出: true

示例 2:
輸入: “()[]{}”
輸出: true

示例 3:
輸入: “(]”
輸出: false

示例 4:
輸入: “([)]”
輸出: false

示例 5:
輸入: “{[]}”
輸出: true

解釋:
對給定的字串 s 進行遍歷,當遇到一個左括號時,在後續的遍歷中,希望有一個相同型別的右括號將其閉合。由於後遇到的左括號要先閉合

,因此可以將這個左括號放入棧頂。當遇到一個右括號時,需要將一個相同型別的左括號閉合。此時,可以取出棧頂的左括號並判斷它們是否是相同型別的括號。如果不是相同的型別,或者棧中並沒有左括號,那麼字串 s 無效,返回False。在遍歷結束後,如果棧中沒有左括號,說明我們將字串 s 中的所有左括號閉合,返回 True,否則返回False。
注意到有效字串的長度一定為偶數,因此如果字串的長度為奇數,我們可以直接返回False,省去後續的遍歷判斷過程。

程式碼如下:

class Solution {
    public boolean isValid(String s) {
        int n =
s.length(); Stack<Character> stack = new Stack<Character>(); if (n % 2 != 0) { return false; } for (int i = 0; i < n; i++) { char ch = s.charAt(i); if (ch == '(') { stack.push(')'); } else if
(ch == '[') { stack.push(']'); } else if (ch == '{') { stack.push('}'); } else if (stack.empty() || ch != stack.pop()) { return false; } } return stack.empty(); } }

執行結果:
在這裡插入圖片描述