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

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

     

    Credits:
    Special thanks to @hpplayer for adding this problem and creating all test cases.

    思路:BFS。首先将s压入队列,循环取出队列头部的字符串,如果其合法,将其加入返回的数组ret中,并设置bool常量found为true。因为我们返回的是括号数目最多的合法字符串,如果found为true,表明找到了一个合法的字符串,后面的字符串没有必要进行切割处理了,所以found为true,直接continue跳过循环。否则尝试切割字符串中的一个左右括号,将其压入队列q中,后续判断其是否合法。注意,为了保证字符串不出现重复,这里用了unordered_map判断是否出现重复字符串,只有首次出现的字符串才会进入队列q中。

    class Solution {
    private:
        bool isValid(string s){
            int count=0;
            for(int i=0;i<s.length();i++){
                if(s[i]=='(')
                    count++;
                else if(s[i]==')'){
                    if(count==0)
                        return false;
                    count--;
                }
            }
            return count==0;
        }
        vector<string> ret;
    public:
        vector<string> removeInvalidParentheses(string s) {
            unordered_map<string,int> map;
            queue<string> q;
            q.push(s);
            map[s]=1;
            bool found=false;
            while(!q.empty()){
                string str=q.front();
                q.pop();
                if(isValid(str)){
                    ret.push_back(str);
                    found=true;
                }
                if(found)
                    continue;
                for(int i=0;i<str.length();i++){
                    if(str[i]!=')'&&str[i]!='(')
                        continue;
                    //将这个括号从字符串中去除
                    string sub=str.substr(0,i)+str.substr(i+1);
                    if(map.find(sub)==map.end()){
                        q.push(sub);
                        map[sub]=1;
                    }
                }
            }
            return ret;
        }
    };
    
     
     
  • 相关阅读:
    自动填写数据与自动点击锭钮提交数据
    序列化(Serialization)据为JSONP远端请求
    使用iframe实现同域跨站提交数据
    使用JSONP跨域请求数据
    程序自动化需要一个Windows服务
    SPC-Light显示正常的日期与时间
    使用DDE传输数据至SQL Server
    C# console application executing macro function
    Transfer data to SQL Server from SPC-Light with Excel macros
    MVC应用程序请求密码的功能(二)
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5024435.html
Copyright © 2011-2022 走看看