zoukankan      html  css  js  c++  java
  • 301. Remove Invalid Parentheses

    很强的一道题!
    核心点:
    1.右括号多了? 怎么删除能够避免重复?比如())怎么避免删除的重复。s.charAt(j) == par[1] && (j == last_j || s.charAt(j - 1) != par[1]) 此条件就能紧紧的限制住! s要删除的时候,必须得是右括号,要不就是第一个右括号,要不前面不能是右括号。
    2.index 保留,s扫的最后的地方.
    3.左括号多了怎么办?

    1. 答案是:从右到左做同样的事情。
    2. 一个更聪明的想法是:反转字符串并重用代码! 我服~ 大写的服
    public static void remove(String s, int index, List<String> res, int last_j, char[] par){
            for (int stack = 0, i = index; i < s.length(); i ++){
                if (s.charAt(i) == par[0])  stack ++;
                if (s.charAt(i) == par[1])  stack --;
                if (stack >= 0) continue;
                for (int j = last_j; j <= i; j ++){
                    if (s.charAt(j) == par[1] && (j == last_j || s.charAt(j - 1) != par[1]) ){
                        remove(s.substring(0,j) + s.substring(j+1, s.length()) , index, res, j,par);
                    } 
                }
                return;
            }
            String reversed = new StringBuilder(s).reverse().toString();
            if (par[0] == '(') 
                remove(reversed, 0, res, 0, new char[]{')', '('});
            else 
                res.add(reversed);
        }
        
        
        public List<String> removeInvalidParentheses(String s) {
            List<String> res = new ArrayList<>();
            remove(s, 0, res, 0, new char[]{'(',')'});
            return res;
        }
    
  • 相关阅读:
    Windows 网络监测ping IP输出时间
    python
    遇见问题汇总
    在路上积累
    Condition
    ReentrantReadWriteLock
    AbstractQueuedSynchronizer
    jmeter使用
    使用VisualVM监控java进程
    CNVD漏洞证书(2)
  • 原文地址:https://www.cnblogs.com/whyaza/p/10722678.html
Copyright © 2011-2022 走看看