给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
给大家上个才艺,看看什么叫屎一样的代码
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def init(self):
target = None
return target
def cin(self,target,data):
p = ListNode(data)
r = p
p.next = target
return r
def out(self,target):
if(target == None):
return '',target
data = target.val
target = target.next
return data,target
def isValid(self, s: str) -> bool:
if(len(s)%2 !=0):return False
target = self.init()
for i in s:
if(i == '(' or i =='[' or i =='{'):
target = self.cin(target,i)
else:
data,target = self.out(target)
if(data + i != '()' and data + i != '[]' and data + i != '{}'):
return False
return True if(target == None) else False
优化
class Solution:
def isValid(self, s: str) -> bool:
if len(s) % 2 == 1:
return False
pairs = {
")": "(",
"]": "[",
"}": "{",
}
stack = list()
for ch in s:
if ch in pairs:
if not stack or stack[-1] != pairs[ch]:
return False
stack.pop()
else:
stack.append(ch)
return not stack