题目大意为:
给定一个字符串,字符串中只包含"("、")"和"*",其中 * 可以当作左括号,也可以当作右括号,也可以什么也不当
当左右括号可以完全匹配或者在 * 的帮助下可以匹配,多余的 * 可以不用管
解题思路:
用栈对左括号进行保存,对*进行计数,当出现右括号时,先从栈中弹出左括号,若栈为空,则消耗一个*,若右括号可以完全被消耗完,则比较栈中剩余的左括号数量和*数量,若左括号数量小于等于*数量,则能够完全匹配,否则必然会有左括号剩下,匹配失败;若右括号不能被完全消耗完,则匹配失败。
def isMatching(s):
if s is None:
return True
else:
stack = []
count = 0
if s[0] == ")":
return False
for i in s:
if stack == [] and i == '(':
stack.append(i)
elif i == "*":
count += 1
else:
if stack:
stack.pop()
elif stack == []:
count -= 1
else:
return False
return len(stack) <= count
def main():
while True:
try:
s = input('请输入字符串:')
print(isMatching(s))
except:
break
if __name__ == '__main__':
main()