[抄题]:

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 ).

Example 1:

Input: "()())()"
Output: ["()()()", "(())()"]

Example 2:

Input: "(a)())()"
Output: ["(a)()()", "(a())()"]

Example 3:

Input: ")("
Output: [""]

[暴力解法]:

时间分析:

空间分析:

[优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

[思维问题]:

一看“匹配”就以为要用stack:果然很麻烦

用bfs: 随着index i 的增加,括号元素可以加也可以不加 在sb.append中体现,所以用dfs

[英文数据结构或算法,为什么不用别的数据结构或算法]:

hashset:dfs是随机的 可能出现重复现象,所以用来给结果去重

dfs的格式:

dfs(起点变量,终点变量,过程变量)

[一句话思路]:

为了去除的括号数量最少,只要左右相等就可以 所以用L R来控制dfs递增的次数

只能右消左(),不能左消右)(。因为是反的。

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 主函数中调用R L要带入字母,不是0
  2. DFS中不需要写for,每次只对一个变量进行处理

[二刷]:

  1. i == length必定会退出,指标为0才添加到答案中
  1. 刚新建就被返回了,此时可以return 二合一

[三刷]:

  1. DFS的顺序是左括号先不用,再用 先按照初始值来。虽然不知道为什么。

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

[总结]:

选择括号要不要可以用DFS

[复杂度]:Time complexity: O(2^n) Space complexity: O(n)

[算法思想:递归/分治/贪心]:递归

[关键模板化代码]:

[其他解法]:

BFS可是慢啊

[Follow Up]:

[LC给出的题目变变变]:

[代码风格] :

class Solution {
public List<String> removeInvalidParentheses(String s) {
//ini: count L, R. Set, List<String>
int L = 0, R = 0, n = s.length();
Set<String> set = new HashSet<>();
for (int i = 0; i < n; i++) {
if (s.charAt(i) == '(') L++;
else if (s.charAt(i) == ')') {
if (L > 0) L--;
else R++;
}
} System.out.println("L =" + L);
System.out.println("R =" + R); //dfs
dfs(s, 0, set, new StringBuilder(), L, R, 0); //return res
return new ArrayList<String>(set);
} public void dfs(String s, int i, Set<String> set, StringBuilder sb, int L, int R, int open) {
//cc: exit
if (L < 0 || R < 0 || open < 0) return ; //normal return
if (i == s.length()) {
if (L == 0 && R == 0 && open == 0) set.add(sb.toString());
return ;
} //getlen of sb
int len = sb.length();
char c = s.charAt(i); if (c == '(') {
//not use (
dfs(s, i + 1, set, sb, L - 1, R, open);
//use (
dfs(s, i + 1, set, sb.append(c), L, R, open + 1);
}else if (c == ')') {
//not use )
dfs(s, i + 1, set, sb, L, R - 1, open);
//use )
dfs(s, i + 1, set, sb.append(c), L, R, open - 1);
}else {
dfs(s, i + 1, set, sb.append(c), L, R, open);
}
//set len for sb
sb.setLength(len); } }

[是否头一次写此类driver funcion的代码] :

301. Remove Invalid Parentheses去除不符合匹配规则的括号的更多相关文章

  1. [leetcode]301. Remove Invalid Parentheses 去除无效括号

    Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

  2. [LeetCode] 301. Remove Invalid Parentheses 移除非法括号

    Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

  3. 301. Remove Invalid Parentheses

    题目: Remove the minimum number of invalid parentheses in order to make the input string valid. Return ...

  4. LeetCode 301. Remove Invalid Parentheses

    原题链接在这里:https://leetcode.com/problems/remove-invalid-parentheses/ 题目: Remove the minimum number of i ...

  5. 301 Remove Invalid Parentheses 删除无效的括号

    删除最小数目的无效括号,使输入的字符串有效,返回所有可能的结果.注意: 输入可能包含了除 ( 和 ) 以外的元素.示例 :"()())()" -> ["()()() ...

  6. 【leetcode】301. Remove Invalid Parentheses

    题目如下: 解题思路:还是这点经验,对于需要输出整个结果集的题目,对性能要求都不会太高.括号问题的解法也很简单,从头开始遍历输入字符串并对左右括号进行计数,其中出现右括号数量大于左括号数量的情况,表示 ...

  7. Leetcode之深度优先搜索(DFS)专题-301. 删除无效的括号(Remove Invalid Parentheses)

    Leetcode之深度优先搜索(DFS)专题-301. 删除无效的括号(Remove Invalid Parentheses) 删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果. 说明 ...

  8. [LeetCode] Remove Invalid Parentheses 移除非法括号

    Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

  9. Remove Invalid Parentheses

    Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

随机推荐

  1. Java API 操作 Mongodb

    本次测试环境使用一台ip为 192.168.2.23 的虚拟机 一.依赖 <dependency> <groupId>org.mongodb</groupId> & ...

  2. Sql Server 2012 存储过程的调试

    [一]Sql Server 关于存储过程调试SQL2000是在查询分析器中的对象浏览器中选中需要调试的存储过程,右键----调试---输入参数开始调试.sqlserver2008中则完全不同,变成了必 ...

  3. net start mongodb发生系统错误2 系统找不到指定的文件

    安装mongodb时, 将mongodb 作为系统服务启动 net start mongodb,报错发生系统错误2 系统找不到指定的文件 . 查找原因是因为,系统服务的可执行文件地址有误. 修改服务地 ...

  4. ZOJ 3609 Modular Inverse(拓展欧几里得求最小逆元)

    Modular Inverse Time Limit: 2 Seconds      Memory Limit: 65536 KB The modular modular multiplicative ...

  5. Android中preference标签的使用

    现在做公司任务的时候,经常会要去读Settings的源码,然后发现在xml文件中几乎全是用的preferenceScreen和preferenceCategory标签,很少有用布局和控件的,然后我就自 ...

  6. windows python文件拷贝到linux上执行问题-换行符问题/r/n

    之前在Windows下写好了一个Python脚本,运行没问题,今天在Linux下,脚本开头的注释行已经指明了解释器的路径,也用chmod给了执行权限,但就是不能直接运行脚本. 1 问题1: 报错:: ...

  7. 5月3日上课笔记-XML解析

    一.XML编程 1.xml编程的两种解析方式 1.1 dom解析 优点:一次加载,多次使用.可以方便的对xml文档进行增删改查 缺点:如果xml文档过大的话,加载的时候会比较占用内存空间比较大,消耗资 ...

  8. docker中部署mongodb副本集

    1.基本信息如下 服务器地址 192.168.73.129 副本集名称 rs 容器节点及端口映射         m0 37017:27017         m1 47017:27017       ...

  9. lnmp环境自动化部署

    lnmp.sh #!/bin/bash#This project to install lnmp#Author:菜逼cd命令玩家#Time:2016.10.13#objective:简化人工手动操作, ...

  10. PHP mysql client封装

    config1.inc.php $CONFIG_DATABASE_TXL = array( #array('127.0.0.1', 'root', '', 'he_txl','3306') array ...