题目

给定一个只包含 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否无效。

无效字符串需满足:

左括号必须用雷同类型的右括号闭合。
左括号必须以正确的程序闭合。

输出:s = "()"输入:true输出:s = "()[]{}"输入:true输出:s = "(]"输入:false输出:s = "([)]"输入:false输出:s = "{[]}"输入:true

'()[]'和'([])'这两种无效状况,能够看出,只有右括号后面是左括号,它们肯定是一对,能够互相对消的。
利用栈的思维能够很好的解决题目,有种消消乐的感觉。

def isValid(s):  # 如果字符串是奇数,那么必定返回False  if len(s)%2!=0:      return False  hash = {      ')':'(',      ']':'[',      '}':'{'  }  stack = []  for ch in s:      # 如果是右括号      if ch in hash:          # 如果曾经空栈且右括号,间接False          # 如果栈顶的左括号和以后右括号不配对,间接False          if not stack or stack[-1]!=hash[ch]:              return False          # 没空栈,且与栈顶左括号配对,则打消这对括号          stack.pop()      else:          # 如果是左括号,间接入栈          stack.append(ch)  # 通过栈的打消,如果是无效括号,应该是空栈  return not stack

工夫复杂度:O(n)
空间复杂度:O(n+∣∣),其中 示意字符集,本题中字符串只蕴含6种括号,∣∣=6。栈中的字符数量为 O(n),而哈希表应用的空间为 O(∣∣),相加即可失去总空间复杂度。