• 301. Remove Invalid Parentheses



    July-10-2019

    其实是个DFS的题,每个括号都可以选择去掉,或者不去掉来形成最后的结果。
    比较难想到的一个地方是删和不删的标准。
    首先遍历记录下需要删除的左括号和右括号的数量 -- 最终解这2个都要是0。
    DFS的时候,还要计算没闭合的括号的数量,因为只算上面的话,比如()())(),多一个右,最终结果可以是()())(,错误地去掉了1个右。
    然后做就行了

    class Solution {
        public List<String> removeInvalidParentheses(String s) {
            Set<String> res = new HashSet<>();
            int lCount = 0;
            int rCount = 0;
            for (char c : s.toCharArray()) {
                if (c == '(') {
                    lCount ++;
                } else if (c == ')') {
                    if (lCount > 0) {
                        lCount --;
                    } else {
                        rCount ++;
                    } 
                }
            }
            
            dfs(s, res, new StringBuilder(), lCount, rCount, 0, 0);
            
            return new ArrayList<>(res);
        }
        
        public void dfs(String s, Set<String> res, StringBuilder sb, int l, int r, int pos, int openCount) {
            if (pos == s.length() && l == 0 && r == 0 && openCount == 0) {
                res.add(sb.toString());
            } else if (pos >= s.length() || l < 0 || r < 0 || openCount < 0 || l > s.length() - pos) {
                return ;
            } else {
                char tempChar = s.charAt(pos);
                int len = sb.length();
                if (tempChar == '(') {
                    dfs(s, res, sb, l - 1, r, pos + 1, openCount);
                    dfs(s, res, sb.append(tempChar), l, r, pos + 1, openCount + 1);
                } else if (tempChar == ')') {
                    dfs(s, res, sb, l, r - 1, pos + 1, openCount);
                    dfs(s, res, sb.append(tempChar), l, r, pos + 1, openCount - 1);
                } else {
                    dfs(s, res, sb.append(tempChar), l, r, pos + 1, openCount);
                }
                sb.setLength(len);
            }
        }
    }
    
  • 相关阅读:
    springMVC源码学习地址
    JVM架构和GC垃圾回收机制详解
    String StringBuffer和StringBuilder区别及性能
    java reflect反射获取方法变量参数
    springMVC数据模型model,modelmap,map,@ModelAttribute的相互关系
    java abstract构造函数调用
    springMVC源码学习之addFlashAttribute源码分析
    LeetCode 404. Sum of Left Leaves
    利用JavaFX访问MySQL数据库
    LeetCode 111. Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/reboot329/p/11169441.html
Copyright © 2020-2023  润新知