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

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

原题链接在这里:

题目:

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

题解:

题目要求减少最小个数的非法括号,要求最小,就想到BFS.

Queue 里加入 原来的string s, 循环中从queue中poll出来一个string. 每次减掉一个括号,若是合法了就加到res中,同时停止继续enqueue, 只把queue中现有的一个level检查了就好。

若是没遇到合法的,就把str从头到尾减掉一个括号放回到queue中。

检查是否合法用isValid. 这种写法不需要stack, 节省了空间。

同时使用Set 来记录已经检查过的string, 检查过就不需要再次检查。

Time Complexity: O(n^2). n = s.length(). Space: O(n).

AC Java:

1 public class Solution { 2     public List
removeInvalidParentheses(String s) { 3 List
res = new ArrayList
(); 4 if(s == null){ 5 return res; 6 } 7 8 LinkedList
que = new LinkedList
(); 9 HashSet
visited = new HashSet
(); //存储已经检查过的string, 没有必要重复检查10 que.add(s);11 visited.add(s);12 boolean found = false; //标签,检查是否找到了valid parentheses13 14 while(!que.isEmpty()){15 String str = que.poll();16 if(isValid(str)){17 res.add(str);18 found = true;19 }20 if(found){ //已经找到,就在本level中找剩下的就好了21 continue;22 }23 for(int i = 0; i

 

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/4961186.html

你可能感兴趣的文章
浏览器的DNS缓存查看和清除
查看>>
浏览器跨域问题
查看>>
HTML5 input控件 placeholder属性
查看>>
使用JAVA如何对图片进行格式检查以及安全检查处理
查看>>
html5实现移动端下拉刷新(原理和代码)
查看>>
iPhone开发中从一个视图跳到另一个视图有三种方法:
查看>>
pytho logging
查看>>
一个Java程序员应该掌握的10项技能
查看>>
c#英文大小写快捷键
查看>>
tpframe免费开源框架又一重大更新
查看>>
一.go语言 struct json相互转换
查看>>
什么是架构设计
查看>>
程序员学习能力提升三要素
查看>>
PHP 微信错误状态返回码说明
查看>>
【4.1】Python中的序列分类
查看>>
ubuntu 移动文件
查看>>
Easy Mock
查看>>
看看 Delphi XE2 为 VCL 提供的 14 种样式
查看>>
Python内置函数(29)——help
查看>>
机器学习系列-tensorflow-01-急切执行API
查看>>