zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }
    
  • 相关阅读:
    git环境搭建、git详细使用教程、快速上手git
    数据一致性解决方案实践
    锁的使用
    数据库连接池优化
    多级缓存优化实践
    服务端调优与JVM调优
    Sentinel 流量防卫兵
    Spring Cloud Gateway微服务网关
    OpenFeign与负载均衡
    Nacos config原理
  • 原文地址:https://www.cnblogs.com/reboot329/p/11169441.html
Copyright © 2011-2022 走看看