这个题呢,来自于力扣,在本周的蓝桥杯训练里也看见了这道题,我认为这道题的复杂程度要高于蓝桥杯训练,所以我把蓝桥杯训练拿出来了,咱们先分析蓝桥杯训练,然后再引出不同点。
前题:
括号()
的组合千奇百怪,Drizzle 想知道各种组合的括号可以是否合法
合法要求:每个同类型的左括号必须有与之对应的同类的右括号以正确的顺序闭合
要求:
输入:输入一个括号字符串 输出:输出是否合法,是则True
,否则False
示例:
输入:
(){}[]
结尾无空行
输出:
True
结尾无空行
范围:
对于 100% 的数据:括号字符串长度 ≤ 100
思路:
第一,我们要明白这个的考点在什么,非常简单,即栈的操作
所以,我们只需要一个列表,然后顺序读取括号,把左括号依次放进去,如果是右括号时,判断是否为一种括号,如果是,移除左括号。即可
代码如下:
def op(str1: str):
str2 = []
for i in str1:
if i == '(' or i == '[' or i == '{':
str2.append(i)
elif i == ')':
if str2[len(str2) - 1] != '(':
return 0
else:
str2.pop()
elif i == ']':
if str2[len(str2) - 1] != '[':
return 0
else:
str2.pop()
elif i == '}':
if str2[len(str2) - 1] != '{':
return 0
else:
str2.pop()
return 1
所以其实难度并不高
然后补全基础代码即可,下面是完整答案
答案:
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/16 18:58
def op(str1: str):
str2 = []
for i in str1:
if i == '(' or i == '[' or i == '{':
str2.append(i)
elif i == ')':
if str2[len(str2) - 1] != '(':
return 0
else:
str2.pop()
elif i == ']':
if str2[len(str2) - 1] != '[':
return 0
else:
str2.pop()
elif i == '}':
if str2[len(str2) - 1] != '{':
return 0
else:
str2.pop()
return 1
str1 = input()
if op(str1):
print('True')
else:
print("False")
复杂化:
Alan最近眼神不好使,经常分不清楚括号,所以想请你帮忙,给定一个只包括 '(',')','{','}','[',']' 的字符串,想让你帮忙编写程序确定括号是否都是正常闭合。
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 空字符串被认定为True
输入格式:
输入空字符串或一行只包含'(',')','{','}','[',']' 的字符串。
输出格式:
如果所有括号正确闭合,输出“True”,否则输出“False”。
输入样例:
在这里给出一组输入。例如:
()
结尾无空行
输出样例:
在这里给出相应的输出。例如:
True
结尾无空行
输入样例:
在这里给出一组输入。例如:
{[()]()}
结尾无空行
输出样例:
在这里给出相应的输出。例如:
True
结尾无空行
输入样例:
在这里给出一组输入。例如:
{{()[]}
结尾无空行
输出样例:
在这里给出相应的输出。例如:
False
结尾无空行
思路:
这个和上面那个有什么区别呢?
毫无疑问在“空字符串被认定为True”
所以我们只需要运用我们非常熟练地判断(try:......except:......):
代码如下:
try:
str1 = input()
if op(str1):
print('True')
else:
print("False")
except :
print('True')
这样我们需要运用前题的思路补全函数即可。
下面为完整答案
答案:
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 20:17
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/16 18:58
def op(str1: str):
str2 = []
if str1.count('(')!=str1.count(')') or str1.count('[')!=str1.count(']') or str1.count('{')!=str1.count('}') :
return 0
for i in str1:
if i == '(' or i == '[' or i == '{':
str2.append(i)
elif i == ')':
if str2[len(str2) - 1] != '(':
return 0
else:
str2.pop()
elif i == ']':
if str2[len(str2) - 1] != '[':
return 0
else:
str2.pop()
elif i == '}':
if str2[len(str2) - 1] != '{':
return 0
else:
str2.pop()
return 1
try:
str1 = input()
if op(str1):
print('True')
else:
print("False")
except :
print('True')