20 有效的括號
阿新 • • 發佈:2020-11-20
給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "()[]{}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: "{[]}"
輸出: true
左括號後續一旦是錯誤的右括號或者沒有後續的時候,字串便無效。使用棧儲存字元,讀到左括號便存在棧中,讀到右括號就判斷前面的符號是否是合適的左括號,如果不是字串便無效,如果是的便將左括號出棧。最後判斷是否所有左括號都出棧即匹配完成。時間複雜度 \(O(n)\)
public boolean isValid(String s) { char[] chars = s.toCharArray(); Stack<Character> stack = new Stack<>(); for (char c : chars) { if (c == '(' || c == '{' || c == '[') { stack.push(c); } else { int size = stack.size(); if (size == 0) { return false; } Character top = stack.peek(); if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) { return false; } stack.pop(); } } if (stack.size() != 0){ return false; } return true; }