給定一個只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判斷字符串是否有效。java
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.python
有效字符串需知足:微信
An input string is valid if:app
注意空字符串可被認爲是有效字符串。ide
Note that an empty string is also considered valid.code
示例 1:字符串
輸入: "()" 輸出: true
示例 2:input
輸入: "()[]{}" 輸出: true
示例 3:string
輸入: "(]" 輸出: false
示例 4:it
輸入: "([)]" 輸出: false
示例 5:
輸入: "{[]}" 輸出: true
很簡單的題,將字符串每一個字符壓入棧,簡單判斷便可。如:
輸入: "{[]}" 初始棧爲空,'{' 入棧 下一個字符 棧頂元素 '{'與 '[' 不匹配,'[' 入棧 下一個字符 棧頂元素 '['與 ']' 匹配,'[' 出棧 下一個字符 棧頂元素 '{'與 '}' 匹配,'}' 出棧 結束,棧爲空,返回 True
關鍵在於判斷字符是否匹配,匹配的標準是相反的括號字符,並不是相同字符。能夠用 switch 判斷三種括號字符,或者三個 if 語句,再或者能夠用散列表映射括號關係。
class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>();//初始化棧 for (char b : s.toCharArray()) { switch (b) { case '(': { stack.push(')'); break; } case '{': { stack.push('}'); break; } case '[': { stack.push(']'); break; } default: {//不匹配的狀況返回false if (stack.isEmpty() || stack.pop() != b) { return false; } } } } return stack.isEmpty();//棧爲空則證實所有匹配,返回true,不然返回false } }
注:python中沒有 switch...case... 語句,官方讓用 if 判斷代替...
class Solution: def isValid(self, s: str) -> bool: stack = [] for c in s: if c == '[': stack.append(']') elif c == '(': stack.append(')') elif c == '{': stack.append('}') elif len(stack) == 0 or stack.pop() != c: return False return len(stack) == 0
歡迎關注微信公.衆號:愛寫Bug