Leetcode每日一刷-20( 有效的括号)

第一种:

# 利用栈的特点,先进后出,左符号添加,用右符号找左符号删除,
# 左加右减,有右无左,为无效 原则
# 判断右符号找不到左符号说明 没有配对的 返回False
class Solution:
  def isValid(self, s):
    stack = []

    dict = {"]": "[", "}": "{", ")": "("}
    for item in s:
      if item in dict.values():
        stack.append(item)
      elif item in dict.keys():
        if stack == [] or dict[item] != stack.pop() :
          return False
      else:
        if item != ' ':
          return False
  return stack == []


# s = '(( )[]){}'
# s = '(][)'
# s = '['
s = ' '
sol = Solution()
print(sol.isValid(s))

 

第二种:

# 这种方法不建议使用,特别是符号嵌套复杂的情况,但是这种想法很秒

有点像消消乐 ,有就消除,不断循环直至没有,如果剩下的就是不符合条件的

class Solution:
  def isValid(self, s):
    s.replace(' ','')
    while '()' in s or '[]' in s or '{}' in s:
      s = s.replace('{}', '')
      s = s.replace('[]', '')
      s = s.replace('()', '')
    return s == ''

# s = '(( )[]){}'
# s = '(][)'
# s = '['
s = ' '
sol = Solution()
print(sol.isValid(s))

 

转载于:https://www.cnblogs.com/MinHuaiL/p/10747299.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值