括號匹配問題

2021-08-29 22:25:37 字數 1125 閱讀 5638

下面的一段python**是檢查括號匹配問題。

zip(brackets[::2], brackets[1::2])返回的是 (('(', ')'), ('[', ']'), (''))

**使用兩個字典,count_left和right_for_left。

初始的時候 count_left =   --- key是左邊的括號,value是括號出現的次數

right_for_left = ':' --- key是右邊的括號,value是對應的左邊的括號

接下來對text進行遍歷,如果當前字元在count_left的key(if c in count_left 相當於 if c in count_left.keys())中,則對應的括號次數加一; 如果當前字元在right_for_left的key中,而此時當前字元對應的做括號在count_left中出現的次數為0,即沒有出現左括號,但是出現了右括號,則直接返回false,表明括號不匹配,否則將對應的左括號在count_left中出現的次數減一,表示一次匹配。

最後判斷count_left裡面是不是所有的value為0,如果均為0,則返回true,否則返回false

def is_banlance(text, brackets = "(){}"):

count_left = {}

right_for_left = {}

for left, right in zip(brackets[::2], brackets[1::2]):

count_left[left] = 0

right_for_left[right] = left

for c in text:

if c in count_left:

count_left[c] += 1

elif c in right_for_left:

if count_left[right_for_left[c]] == 0:

return false

else:

count_left[right_for_left[c]] -=1

return not any(count_left.values())

print(is_banlance("()***((***))"))

括號匹配問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 樣例輸入 3 樣例輸出 no noyes 基本演算法思...

括號匹配問題

假設表示式中包含三種括號 圓括號 方括號和花括號,它們可以相互巢狀,如 等均為正確的格式,而等為不正確的格式。以下為演算法程式 括號匹配問題 include include int main char ch while ch getchar eof count 0 break case if cou...

括號匹配問題

問題描述 假設表示式中允許包含兩種括號 圓括號與方括號,其巢狀的順序隨意。如 或 等為正確的匹配 而 或者 或者 均為錯誤的匹配。現要求編寫程式,判斷輸入的一行括號是否是匹配的,如果是匹配的,輸出yes,否則輸出no。解題思路 檢驗括號是否是匹配的方法可以用 期待的急迫程度 這個概念來描述。例如考慮...