在一行中输入一个字符串
,长度
,由可见字符组成。
如果字符串
中的括号部分能构成合法括号序列,则输出 `true`;否则输出 `false`。
abcd(])[efg
false
提取括号 `(`、`)`、`[`、`]` 后为 `(])[`,不是合法括号序列。
a[x(y)z]
true
提取括号后为 `[()]`,是合法括号序列。
class My_Stack: def __init__(self, elements=[]): self._elements = list(elements) def is_empty(self): #return not self._elements return self._elements == [] def push(self, element): self._elements.append(element) def pop(self): if self.is_empty(): raise ValueError element = self._elements.pop() return element def func(input_str): st = My_Stack() for ch in input_str: if ch == "[" or ch == "(": st.push(ch) elif ch == "]": if st.is_empty(): print("false") return element = st.pop() if element != "[": print("false") return elif ch == ")": if st.is_empty(): print("false") return element = st.pop() if element != "(": print("false") return else: continue if not st.is_empty(): print("false") else: print("true") input_str = input() func(input_str)
"""" 括号匹配,借助栈后进先出的性质 """ if __name__ == "__main__": s = input().strip() ans = True flag = [] for c in s: if c == '[' or c == '(': flag.append(c) elif c == ']': if not flag or flag.pop() != '[': ans = False break elif c == ')': if not flag or flag.pop() != '(': ans = False break else: pass if flag: ans = False print("true" if ans else "false")