給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。
有效字串需滿足:
注意空字串可被認為是有效字串。
輸入: 「()」
輸出: true
輸入: 「(){}」
輸出: true
輸入: 「(]」
輸出: false
輸入: 「([)]」
輸出: false
輸入: 「」
輸出: true
參考官方解答,利用棧
class
solution
(object)
: def isvalid
(self, s)
:"""
:type s: str
:rtype: bool
"""length =
len(s)
# 空字串被認為是有效字串
if length ==0:
return true
# 不成對必然不是有效字串
if length%2!=
0:return false
pair =
dict()
pair[
"("]
=")"
pair[
"["]
="]"
pair[
""
stack =
list()
stack.
(s[0])
i =1while iiflen
(stack)!=0
:
# stack中最後乙個是右括號,說明前面沒有和其對應的左括號
if stack[-1
] not in pair.
keys()
:return false
# 當前括號是右括號且與stack中最後乙個括號對應
if s[i]
==pair[stack[-1
]]: stack.
pop(
)
# 當前括號是左括號
# 當前括號是右括號,但是前乙個括號和它不對應
else
: stack.
(s[i]
)
# 當前stack是空的,前面的都配對了
else
: stack.
(s[i]
) i +=
1return
len(stack)
==0
利用python的函式,如果發現成對括號,則將其替換為空;若所有括號都成對,則最後字串為空。
class
solution
(object)
: def isvalid
(self, s)
:"""
:type s: str
:rtype: bool
"""while
'{}' in s or '()' in s or '' in s:
s = s.
replace
('{}',''
) s = s.
replace(''
,'') s = s.
replace
('()',''
)return s ==
''
力扣刷題記錄 字串 簡單 859親密字串
給定兩個由小寫字母構成的字串 a 和 b 只要我們可以通過交換 a 中的兩個字母得到與 b 相等的結果,就返回 true 否則返回 false 輸入 a ab b ba 輸出 true 輸入 a ab b ab 輸出 false 輸入 a aa b aa 輸出 true 輸入 a aaaaaaabc...
力扣刷題記錄 字串 簡單 551學生出勤記錄 I
給定乙個字串來代表乙個學生的出勤記錄,這個記錄僅包含以下三個字元 如果乙個學生的出勤記錄中不超過乙個 a 缺勤 並且不超過兩個連續的 l 遲到 那麼這個學生會被獎賞。請需要根據這個學生的出勤記錄判斷他是否會被獎賞。輸入 ppallp 輸出 true 輸入 ppalll 輸出 false class ...
力扣刷題記錄 字串 簡單 521最長特殊序列
給定兩個字串,你需要從這兩個字串中找出最長的特殊序列。最長特殊序列定義如下 該序列為某字串獨有的最長子序列 即不能是其他字串的子串行 子串行可以通過刪去字串中的某些字元實現,但不能改變剩餘字元的相對順序。空串行為所有字串的子串行,任何字串為其自身的子串行。輸入為兩個字串,輸出最長特殊序列的長度。如果...