Python|判斷各種括號的有效使用
- 2020 年 2 月 21 日
- 筆記
if len(string) > 2:
print("false")
if len(string) == 2:
d = ["()","{}","[]"]
if string in d:
print("true")
else:
print("false")
給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。有效字符串需滿足:
1.左括號必須用相同類型的右括號閉合。
2.左括號必須以正確的順序閉合。
解決方案
思路:首先我們要講我們輸入的字符串中的括號提取出來到一個列表,然後判斷是奇數個還是偶數個,奇數個一定不符合;如果是偶數,再遍歷所有元素,因為括號在一起,通過以i和i+1的形式來確定符合的括號,再通過切片將符合的全部切去,將最後剩下的再來判斷,將三種符號放入列表中,如果剩下的大於2個就無效,如果是兩個並且在了列表中就有效。
首先我們通過一個for循環將我們輸入的這個字符串中的括號提取出來,以通過建一個包含這些括號的列表然後挨個挨個的循環看是否每個元素屬於這個列表,最後得到一個只含括號的列表,再將其轉化為一個字符串然後進行後面的操作。
str = input("請輸入一個包括 '(',')','{','}','[',']' 的字符串:") f = list() a = ["(",")","{","}","[","]"] for mmm in str: if mmm in a: f.append(mmm) cc= "".join(f) |
---|
先判斷是否為奇數個
string =cc lenth = int(len(string)) if lenth % 2 == 1: print("false,只有奇數個字符") |
---|
如果這裡為奇數個,就直接判斷無效並且退出程序,因為符號一定是一一對應,奇數個便不能對應.如果為偶數,則跳開進入下面的程序。
if lenth % 2 == 0: for n in range(int(lenth)): for m in range(len(string) – 2): a = string[m] == "(" and string[m+1] == ")" b = string[m] == "[" and string[m+1] == "]" c = string[m] == "{" and string[m+1] == "}" |
---|
這裡是在個數為偶數的情況下,先遍歷所有的符號元素,然後加一個for循環,同時a,b,c分別是我們想要在這個字符串中判斷的依據,代碼意思是一組符號總是相鄰存在。先設定好條件,然後再進行接下來的步驟。
if a or b or c: string = string[:m] + string[m+2:] break |
---|
這裡,上面三個條件在for循環下隨便滿足一個就進行切片處理,將滿足的兩個符號前後的所有元素進行切片然後組合,就得到除去這組元素的另一個字符串。一直循環,直到沒有滿足條件的就跳出循環。
if len(string) > 2: print("false") if len(string) == 2: d = ["()","{}","[]"] if string in d: print("true") else: print("false") |
---|
然後接下來對剩下的進行判斷,如果多餘兩個剩下,那就說明有多個未切片成功,就一定有相鄰不匹配的,那麼這個字符串無效。如果最後只剩下兩個的話,我們不妨先設出一個包含3組正確順序的列表,然後將我們切片剩下的字符串拿來比,如果剩下的在我們設的列表中的話,那麼就說明是有效的,反之無效。
結語
解決字符串中類似循環刪除問題的時候,我們可以利用切片,合併的功能。還有看到題目時一定要考慮有沒有簡單直接的方法能夠幫忙理解,如本題的奇數個就可以直接判斷出來。
實習編輯 | 王楠嵐
責 編 | 李和龍