作业习题如上:
搜索了许多做法发现使用堆栈来解决似乎是最优方法,但是鉴于我学习尚浅,(课程知识)还没有学到数据结构,所以通过模仿大佬的算法原理用列表解决这个问题。
(Stack建立也是通过列表来完成,其中原理应该是相通的)
def check_str(strings):
#建立key和value互为匹配括号的字典
dic = {'(':')',
'[':']',
'{':'}'}
#建立空列表用于储存左括号,建立右括号的列表
lst = []
lst2 = [')',']','}']
#对字符串进行for循环逐一检查
for s in strings:
#如果字符为左括号则存储于lst
if s in dic:
lst.append(s)
elif s in lst2:
if len(lst) != 0:
if dic[lst[-1]] != s:
#如果字符为右括号且lst不为空列表
#且字符无法与lst末尾括号对应,
print("There is a mistake...")
#如果字符为右括号且对应则删除lst末尾括号
else:
lst.pop(-1)
#如果列表空出现右括号也return False
else:
print("There is a mistake...")
这样写的结果就是整个代码看起来十分冗余,感觉还是有可以改进的地方。
(There is a mistake...是不想打了的结果,正常应该是return False)
其中算法原理讲解得很清楚。