我经常逛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) == 0Java代码
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 };
一直原创,从未转载
请认准我, 将我置标
转发,好看支持一下,感谢
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did127766