设为首页 加入收藏

TOP

[LeetCode] Remove Invalid Parentheses
2015-11-21 00:55:14 来源: 作者: 【 】 浏览:1
Tags:LeetCode Remove Invalid Parentheses

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())()”]
“)(” -> [“”]

解题思路

括号总是成对出现的,因此我们只需要记录尚未匹配的
每次循环时有如下三种情况:

(, 保留或者不保留。 ), 如果我们有未匹配的 ,则有两种选择;否则,只能不保留。 保留其他字符。

因为我们要移除数量最少的括号,我们应该得到最大的匹配()数量,注意下面两行的顺序。

dfs(str.substring(1), subRes + '(', countLeft + 1, maxLeft + 1);
dfs(str.substring(1), subRes, countLeft, maxLeft);

它可以保证最长的结果出现在比它较短的结果前面。

实现代码

Java

// Runtime: 216 ms
public class Solution {
    private List
   
     res = new ArrayList
    
     (); private int max = 0; public List
     
       removeInvalidParentheses(String s) { dfs(s, , 0, 0); if (res.size() == 0) { res.add(); } return res; } private void dfs(String str, String subRes, int countLeft, int maxLeft) { if (str.length() == 0) { if (countLeft == 0 && subRes.length() != 0) { if (maxLeft > max) { max = maxLeft; } if (max == maxLeft && !res.contains(subRes)) { res.add(subRes.toString()); } } return; } if (str.charAt(0) == '(') { dfs(str.substring(1), subRes.concat((), countLeft + 1, maxLeft + 1); dfs(str.substring(1), subRes, countLeft, maxLeft); } else if (str.charAt(0) == ')') { if (countLeft > 0) { dfs(str.substring(1), subRes.concat()), countLeft - 1, maxLeft); } dfs(str.substring(1), subRes, countLeft, maxLeft); } else { dfs(str.substring(1), subRes.concat(String.valueOf(str.charAt(0))), countLeft, maxLeft); } } }
     
    
   

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇(React: Up and Running)阅读笔记.. 下一篇leetcode笔记:Edit Distance

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: