1. 算法描述
给定一个只包括’(‘,’)‘, ‘{’, ‘"’,’[‘,’]的字符串,判断字符串是否有效。有效字符串需满足:
- 1.左括号必须用相同类型的右括号闭合。
- 2.左括号必须以正确的顺序闭合。
- 空字符串可被认为是有效字符串。
2. 实例说明
只有左右括号向对应才是有效
3. 算法思路
- 解法一:字符串替换法,在字符串中找成对的()、[]、{},找到后替换成空,然后判断是否为空,如果为空就是有效,如果不为空则相反
- 解法二:利用栈的后进先出原则
3. 代码实现
字符串替换法
字符串替换可以使用正则
re.sub
或者str.replace()
实现代码📝:
import re
def valid_str(string):
# 不是2的倍数直接返回false
if len(string) % 2 == 1:
return False
while '()' in string or '[]' in string or '{}' in string:
string = re.sub('\(\)|\[\]|{}', '', string)
return string == ''
print(valid_str('()'))
print(valid_str('()[]{}'))
print(valid_str('(}'))
运行结果👇:
栈
实现代码📝:
import re
def valid_str(string):
# 不是2的倍数直接返回false
if len(string) % 2 == 1:
return False
stack = []
# 字典保存左右括号的关系
char_dict = {
')':'(',
'}':'{',
']':'['
}
for char in string:
# 如果遍历的字符在字典里说明是右括号
if char in char_dict :
# 右括号对的左括号是否栈里的左括号
if not stack or char_dict[char] != stack.pop():
return False
# 反之是左括号就加入栈
else:
stack.append(char)
return not stack
print(valid_str('()'))
print(valid_str('()[]{}'))
print(valid_str('(}'))
运行结果:
《100天精通Python从入门到就业》专栏推荐白嫖80gPython全栈视频
《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html文章来源:https://www.toymoban.com/news/detail-597266.html
- 优点:订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)!
-
专栏福利:简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
文章来源地址https://www.toymoban.com/news/detail-597266.html
到了这里,关于Python每日一练——第6天:判断有效括号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!