leecode 之20 有效的括號

2021-10-02 20:10:47 字數 2518 閱讀 9715

題目的描述:

給定乙個只包括 '(',')','','[',']' 的字串,判斷字串是否有效。

有效字串需滿足:

左括號必須用相同型別的右括號閉合。

左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

方法一:解題思路:

主要思想是利用棧的思想,依次匹配字串中的子字串,並進行刪除。

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 輸入 輸...