博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Remove Invalid Parentheses
阅读量:6566 次
发布时间:2019-06-24

本文共 1858 字,大约阅读时间需要 6 分钟。

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 mspublic 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); } }}

转载地址:http://ajjjo.baihongyu.com/

你可能感兴趣的文章
osd内的pg数量
查看>>
shell脚本与mysql交互方法汇总
查看>>
Cron 表达式详解和案例
查看>>
Android - 软件自动更新的实现
查看>>
oracle数据库远程不落地导入本地数据库
查看>>
Unix调试的瑞士军刀:lsof(转)
查看>>
dns相关内容
查看>>
JavaScript骚操作
查看>>
MySQL的主从复制与读写分离原理
查看>>
luaCPU性能测试
查看>>
mysql优化
查看>>
【批处理】for循环中产生不同的随机数
查看>>
Gradle -help
查看>>
/etc/security/limits.conf
查看>>
js 框架
查看>>
android 实现ListView中添加RaidoButton单选
查看>>
Oracle数据库:启动操作
查看>>
linux下的防火墙
查看>>
SNAT与DNAT
查看>>
Linux 修改密码“ Authentication token manipulation err”
查看>>