- 有效的括號(hào)
給定一個(gè)只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號(hào)必須用相同類型的右括號(hào)閉合。
左括號(hào)必須以正確的順序閉合。
注意空字符串可被認(rèn)為是有效字符串。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "()[]{}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: "{[]}"
輸出: true
題目鏈接:https://leetcode.com/problems/valid-parentheses/
數(shù)據(jù)結(jié)構(gòu)里面的題,就是利用棧對(duì)比求解,python結(jié)合list列表即可。
解題思路:若括號(hào)字符串長(zhǎng)度為奇數(shù)肯定無(wú)效。為偶數(shù)時(shí)分兩種情況,示例 2 "()[]{}"型的,相鄰的為一組有效括號(hào),示例 5"{[]}"型的,首尾的一組為有效括號(hào)。
class Solution:
def isValid(self, s: str) -> bool:
temp = []
l = len(s)
if l % 2 == 1: # 長(zhǎng)度為奇數(shù)直接返回False
return False
i = 0
while i < l:
if len(temp)>0: # 為示例5型的出棧對(duì)比
s1 = temp.pop()
if not self.valid(s1,s[i]):
temp.append(s1)
temp.append(s[i])
i += 1
else: # 為示例2型的相鄰兩兩對(duì)比
if not self.valid(s[i], s[i+1]):
temp.append(s[i])
temp.append(s[i+1])
i += 2
return len(temp) == 0
def valid(self, s1, s2):
if s1 == '(':
return s2 == ')'
elif s1 == '[':
return s2 == ']'
elif s1 == '{':
return s2 == '}'
else:
return False