题目的描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一:解题思路: 主要思想是利用栈的思想,依次匹配字符串中的子字符串,并进行删除。 1:判断字符串长度的奇偶数 2:依次判断字符串中每一个字符的情况: ①判断首字符串的左右括号情况,若为左,直接添加到栈(后进先出)中;若为右,返回为‘false’ ②判断首字符后的其他字符的左右情况,若为左,直接添加到栈中; ③若为右,弹出栈中的元素与该字符串进行匹配(判断栈是否为空),若为空或者不匹配,则返回‘false’ 3:最后判断栈是否为空,若为空,则true,否则false & 字符串S的元素a下标索引方式:s.index(a)
class Solution:
def isValid(str):
left = ['{', '[', '(']
right = ['}', ']', ')']
stack = []
if len(str) % 2 is not 0: # 余数是否是0来判断奇偶数
print("字符串长度是奇数")
return False
else:
for char in str:
if char in left or char in right:
if str.find(char) == 0: # 是否是第一个元素
if char in right:
print("false")
return False
else:
stack.append(char)
else:
if char in left: # 左括号直接入栈
stack.append(char)
else: # 如果是右括号
if len(stack)==0 or (len(stack)!=0 and (left.index(stack.pop()) != right.index(char))):
print("栈为空或者不匹配")
return False
else:
print("存在非法字符")
return False
if len(stack)!=0:
print("栈不空")
return False
else:
print("合法字符串")
return True
str="()"
str="()[]{}"
str="(]"
str="{[]}"
a=Solution
a.isValid(str)
方法二:解题思路: 主要思想是利用栈的思想,依次匹配字符串中的子字符串,并进行删除。 1:判断字符串长度的奇偶数 2:依次判断字符串中每一个字符的情况: ①利用字典的特点,判断每一个字符是否是左括号,直接添加到栈中; ②考虑到栈为空的情况,在栈中,补充额外的key-value(例如'?':'?') ③若不是左括号,则弹出栈顶元素,将字符匹配该栈顶key的value值,若未匹配成功,则返回false 3:通过判断栈中是否只剩下初始的一个元素,例如:?,来判断字符串是否合法
class Solution:
def isValid(s):
"""
关键与上一种方法比较在于添加 '?': '?'
否则出错:
KeyError: '?'
Line 13 in isValid (Solution.py)
Line 44 in _driver (Solution.py)
Line 55 in <module> (Solution.py)
:return:
"""
str_dic = {'{': '}', '[': ']', '(': ')', '?': '?'} # 通过字典形式来初始符号的匹配
stack = ['?']
if len(s) % 2 is not 0:
print("字符串长度是奇数")
return False
else:
for char in s:
if char in str_dic:
stack.append(char)
elif char != str_dic[stack.pop()]:
return False
# return len(stack)==1
if len(stack) == 1:
print("合法字符串")
return True
else:
print("字符串不合法")
return False
str = "()"
str = "()[]{}"
str = "(]"
str = "{[]}"
str == "){"
a = Solution
a.isValid(str)