括號匹配說明
算法思路
- 從左到右遍歷字符串
- 如果不是括號,默認是有效字符,遍歷下一個字符
- 如果是左括號,左括號進入棧,遍歷下一個字符
- 如果是右括號
- 當前棧是否還有左括號
- 沒有則匹配失敗
- 有,出棧比較是否匹配
- 如果出棧的字符和當前字符匹配為一對括號,遍歷下一個
- 不匹配,則匹配失敗
- 遍歷完畢后,判斷棧中是否還有剩余左括號
python代碼
def is_encode(str):
# 放左右括號的棧
bracket = '()'
open_brackets = []
close_brackets = [')']
# 見一個右括號就出一個左括號
for i in range(len(str)):
si = str[i]
# 如果不是括號,下一個
if bracket.find(si) == -1:
continue
# 如果是左括號就入棧
if si == '(':
open_brackets.append(si)
continue
# 走下下面說明就是右括號了,因為上面已經排除了不是字母和左括號了
if len(open_brackets) == 0:
# 現在來了個右括號,但是沒有匹配的了
return False
#上面排除了各種情況,現在開始正常匹配了
p = open_brackets.pop()
if p =='(' and si ==')':
continue
else:
return False
#判斷是否還有多余的左括號呀
if len(open_brackets) > 0:
return False
return True