leetcode:Remove Invalid Parentheses
来源:互联网 发布:js字符串实例 编辑:程序博客网 时间:2024/05/21 06:59
Remove the minimum number of invalid parentheses in order to make the input string valid. Return all possible results.
Note: The input string may contain letters other than the parentheses (
and)
.
Examples:
"()())()" -> ["()()()", "(())()"]"(a)())()" -> ["(a)()()", "(a())()"]")(" -> [""]
Credits:
Special thanks to @hpplayer for adding this problem and creating all test cases.
class Solution(object): def isValid(self, s): leftCount = 0 for c in s: if c == '(': leftCount = leftCount+1 elif c == ')': if leftCount > 0: leftCount = leftCount-1 else: return False if leftCount == 0: return True else: return False def removeInvalidParentheses(self, s): """ :type s: str :rtype: List[str] """ q = [s] ans = [] visited = set(q) found = False while len(q) > 0: cur = q.pop(0) if self.isValid(cur): ans.append(cur) found = True elif not found: for i in xrange(len(cur)): if cur[i] == '(' or cur[i] == ')': candidate = cur[:i] + cur[i+1:] if candidate not in visited: q.append(candidate) visited.add(candidate) return ans
BFS的思想,邻接节点是 比当前节点改变一个字节的节点
https://leetcode.com/discuss/67842/share-my-java-bfs-solution
public class Solution { public List<String> removeInvalidParentheses(String s) { List<String> res = new ArrayList<>(); // sanity check if (s == null) return res; Set<String> visited = new HashSet<>(); Queue<String> queue = new LinkedList<>(); // initialize queue.add(s); visited.add(s); boolean found = false; while (!queue.isEmpty()) { s = queue.poll(); if (isValid(s)) { // found an answer, add to the result res.add(s); found = true; } if (found) continue; // generate all possible states for (int i = 0; i < s.length(); i++) { // we only try to remove left or right paren if (s.charAt(i) != '(' && s.charAt(i) != ')') continue; String t = s.substring(0, i) + s.substring(i + 1); if (!visited.contains(t)) { // for each state, if it's not visited, add it to the queue queue.add(t); visited.add(t); } } } return res; } // helper function checks if string s contains valid parantheses boolean isValid(String s) { int count = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '(') count++; if (c == ')' && count-- == 0) return false; } return count == 0; }}
还有一个DFS思想的解法
https://leetcode.com/discuss/72208/easiest-9ms-java-solution
public List<String> removeInvalidParentheses(String s) { Set<String> res = new HashSet<>(); int rmL = 0, rmR = 0; for(int i = 0; i < s.length(); i++) { if(s.charAt(i) == '(') rmL++; if(s.charAt(i) == ')') { if(rmL != 0) rmL--; else rmR++; } } DFS(res, s, 0, rmL, rmR, 0, new StringBuilder()); return new ArrayList<String>(res); }public void DFS(Set<String> res, String s, int i, int rmL, int rmR, int open, StringBuilder sb) { if(i == s.length() && rmL == 0 && rmR == 0 && open == 0) { res.add(sb.toString()); return; } if(i == s.length() || rmL < 0 || rmR < 0 || open < 0) return; char c = s.charAt(i); int len = sb.length(); if(c == '(') { DFS(res, s, i + 1, rmL - 1, rmR, open, sb); DFS(res, s, i + 1, rmL, rmR, open + 1, sb.append(c)); } else if(c == ')') { DFS(res, s, i + 1, rmL, rmR - 1, open, sb); DFS(res, s, i + 1, rmL, rmR, open - 1, sb.append(c)); } else { DFS(res, s, i + 1, rmL, rmR, open, sb.append(c)); } sb.setLength(len);}
0 0
- [LeetCode] Remove Invalid Parentheses
- LeetCode -- Remove Invalid Parentheses
- leetcode Remove Invalid Parentheses
- LeetCode Remove Invalid Parentheses
- [Leetcode]Remove Invalid Parentheses
- leetcode:Remove Invalid Parentheses
- leetcode - Remove Invalid Parentheses
- 【Leetcode】Remove Invalid Parentheses
- LeetCode:Remove Invalid Parentheses
- Remove Invalid Parentheses -- Leetcode
- [LeetCode]Remove Invalid Parentheses
- leetcode 301 : Remove Invalid Parentheses
- Leetcode 301. Remove Invalid Parentheses
- leetcode 301. Remove Invalid Parentheses
- [leetcode] 301. Remove Invalid Parentheses
- leetcode.301. Remove Invalid Parentheses
- [LeetCode]--301. Remove Invalid Parentheses
- Leetcode 301. Remove Invalid Parentheses
- s3c2440时钟+nandflash拷贝至SDRAM+开启mmu
- 冥想
- leetcode:Integer to English Words
- 新手
- ubuntu 安装配置 JDK
- leetcode:Remove Invalid Parentheses
- android studio中做断点测试
- Java设计模式(二十二)----调停者模式
- 【C语言】C语言常量和变量
- SERDES总结
- 【翻译自mos文章】在Oracle 12c中建立用户--避免ORA-65096 or ORA-65049错误
- 七层登录
- leetcode:Additive Number
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值