题目定义
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
来源:力扣(LeetCode)
链接: leetcode_20题.
解题
本次使用3种方法
1. 使用栈 (列表)
左括号进行压栈 右括号进行出栈
2. 优化版(栈)
3. 字符串替换
将相对的括号替换为空
===================================================
实现
// An highlighted block
# Definition for singly-linked list.
class Solution:
def isValid(self, s):
'''
其实就是利用堆栈 原理 压栈和出栈
'''
# 首先定义一个列表
left_list = []
left_bracket = [ '(','{','[']
right_bracket = {')':'(','}':'{',']':'['}
if len(s) ==0:
return True
if len(s)<2 or len(s)%2!=0: # 将一些边界条件去掉
return False
for i in s :
# 遍历字符串 如果出现左括号就将 左括号加进列表 如果出现右括号 就判断列表中的左括号是否是列表的最后一个
if i in left_bracket:
left_list.append(i)
continue
if len(left_list)>0 and left_list[-1] == right_bracket[i]:
left_list.pop(-1)
else :
return False
if len(left_list)==0:
return True
else:
return False
def isValid_1(self, s):
'''
优化版本
'''
if len(s) ==0:
return True
if len(s)<2 or len(s)%2!=0: # 将一些边界条件去掉
return False
d = {")": "(", "]": "[", "}": "{"}
l = []
for i in s:
if d.get(i) is None:
l.append(i)
elif len(l) == 0 or d.get(i) != l[-1]:
return False
elif d.get(i) == l[-1]:
l.pop()
if len(l) == 0:
return True
else:
return False
def isValid_2(self, s):
'''
字符串替换进行解决
'''
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''
print(Solution().isValid('){'))