題目的描述:
給定乙個只包括 '(',')','','[',']' 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
方法一:解題思路:主要思想是利用棧的思想,依次匹配字串中的子字串,並進行刪除。
1:判斷字串長度的奇偶數
2:依次判斷字串中每乙個字元的情況:
①判斷首字串的左右括號情況,若為左,直接新增到棧(後進先出)中;若為右,返回為『false』
②判斷首字元後的其他字元的左右情況,若為左,直接新增到棧中;
③若為右,彈出棧中的元素與該字串進行匹配(判斷棧是否為空),若為空或者不匹配,則返回『false』
3:最後判斷棧是否為空,若為空,則true,否則false
& 字串s的元素a下標索引方式:s.index(a)
class solution:
def isvalid(str):
left = ['', ']', ')']
stack =
if len(str) % 2 is not 0: # 餘數是否是0來判斷奇偶數
print("字串長度是奇數")
return false
else:
for char in str:
if char in left or char in right:
if str.find(char) == 0: # 是否是第乙個元素
if char in right:
print("false")
return false
else:
else:
if char in left: # 左括號直接入棧
else: # 如果是右括號
if len(stack)==0 or (len(stack)!=0 and (left.index(stack.pop()) != right.index(char))):
print("棧為空或者不匹配")
return false
else:
print("存在非法字元")
return false
if len(stack)!=0:
print("棧不空")
return false
else:
print("合法字串")
return true
str="()"
str="(){}"
str="(]"
str=""
a=solution
a.isvalid(str)
方法二:解題思路:主要思想是利用棧的思想,依次匹配字串中的子字串,並進行刪除。
1:判斷字串長度的奇偶數
2:依次判斷字串中每乙個字元的情況:
①利用字典的特點,判斷每乙個字元是否是左括號,直接新增到棧中;
②考慮到棧為空的情況,在棧中,補充額外的key-value(例如'?':'?')
③若不是左括號,則彈出棧頂元素,將字元匹配該棧頂key的value值,若未匹配成功,則返回false
3:通過判斷棧中是否只剩下初始的乙個元素,例如:?,來判斷字串是否合法
class solution:
def isvalid(s):
"""關鍵與上一種方法比較在於新增 '?': '?'
否則出錯:
keyerror: '?'
line 13 in isvalid (solution.py)
line 44 in _driver (solution.py)
line 55 in (solution.py)
:return:
"""str_dic = ', '[': ']', '(': ')', '?': '?'} # 通過字典形式來初始符號的匹配
stack = ['?']
if len(s) % 2 is not 0:
print("字串長度是奇數")
return false
else:
for char in s:
if char in str_dic:
elif char != str_dic[stack.pop()]:
return false
# return len(stack)==1
if len(stack) == 1:
print("合法字串")
return true
else:
print("字串不合法")
return false
str = "()"
str = "(){}"
str = "(]"
str = ""
str == "){"
a = solution
a.isvalid(str)
03 有效的括號(leecode 20)
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...
Leecode有效的括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...
Leecode 20 有效的括號 C語言
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...