給定一個隻包括 '(' ')' '{' '}' '[' ']'
,
的字元串,判斷字元串是否有效。
Given a string containing just the characters
'('
, ')'
'{'
'}'
'['
and ']'
, determine if the input string is valid.
有效字元串需滿足:
- 左括号必須用相同類型的右括号閉合。
- 左括号必須以正确的順序閉合。
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
注意空字元串可被認為是有效字元串。
Note that an empty string is also considered valid.
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "()[]{}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: "{[]}"
輸出: true
解題思路:
很簡單的題,将字元串每個字元壓入棧,簡單判斷即可。如:
輸入: "{[]}"
初始棧為空,'{' 入棧
下一個字元
棧頂元素 '{'與 '[' 不比對,'[' 入棧
下一個字元
棧頂元素 '['與 ']' 比對,'[' 出棧
下一個字元
棧頂元素 '{'與 '}' 比對,'}' 出棧
結束,棧為空,傳回 True
關鍵在于判斷字元是否比對,比對的标準是相反的括号字元,并非相同字元。可以用 switch 判斷三種括号字元,或者三個 if 語句,再或者可以用散清單映射括号關系。
Java:
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:
注: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