Leetcode之有效的括号

  • 2019 年 10 月 4 日
  • 筆記

点击上方 毛利学python,选择置顶或星标

第一时间送达Python 技术干货!

我经常逛leetcode,决定每周更新几道leetcode的题目

  • 参考极客时间前facebook超哥和前google王争

想购买的找我拿海报

  • leetcode大神题解

有效的括号

leetcode 第20题 判断有效的括号

我想到的左右消除,利用字典的对应关系来左括号和右括号相消,如果为空就是真。

class Solution(object):      def isValid(self, s):          """          :type s: str          :rtype: bool          """          stack = []          map = {')':'(',']':'[','}':'{'}          for i in s:              # 出现了右括号就不添加              if i not in map:                  stack.append(i)              elif not stack or map[i] != stack.pop():                  return False          return not stack  

当然还有堆栈的方法

class Solution(object):      def isValid(self, s):          """          :type s: str          :rtype: bool          """            left = '{[('          rigth = '}])'          mylist= []          for i in s:              if i in left:                  mylist.append(i)              # 说明就是右括号              # 出现了右括号没有左括号 出现了不对应的左括号,如果有就删到              elif len(mylist) == 0 or left.index(mylist.pop()) != rigth.index(i):                  return False          return len(mylist) == 0  

Java代码

class Solution {      //3 ms,      public boolean isValid(String s) {          // 定义一个栈          Stack<Character> stack = new Stack<>();          for(int i = 0; i < s.length(); i++){              char ch = s.charAt(i);              // || 或  如果是左括号就push              if(ch == '(' || ch == '{' || ch == '['){                  stack.push(ch);              }else{                  // 现在是右括号                  if(stack.isEmpty()){                      return false;                  }                  // 定义删除的pop                  char pop = stack.pop();                  // 三种可能                  if(ch == ')' && pop != '('){                      return false;                  }else if(ch == '}' && pop != '{'){                      return false;                  }else if(ch == ']' && pop != '['){                      return false;                  }              }          }          return stack.isEmpty();      }  }  

js

js参考大神的题解

/**   * @param {string} s   * @return {boolean}   */    var isValid = function (s) {      //定义一个map      var map = {          "(": ")",          "[": "]",          "{": "}"      }      while (s.length) {          var left = s[0];          if (!(left in map))              return false;          var i = 1;          while (s[i] != map[left] && i < s.length) left = s[i++];          if (s[i] != map[left]) return false          s = s.slice(0, i - 1) + s.slice(i + 1, s.length);      }      return true  };