void dfsRemove(string s, vector<string>&ret,int last_break, int last_removal,vector<char>&par){

    int stack = 0;
    int break_index = last_break;
    for(int i = last_break;i<s.size();i++){
        if(s[i] == par[0]){
            stack++;
        }else if(s[i] == par[1]){
            stack--;
        }
        if(stack<0){
            break_index = i;
            break;
        }
    }

    if(stack<0){
        for(int j = last_removal;j<=break_index;j++){

            if(s[j] == par[1] && (j == last_removal || s[j-1] != par[1]) ){

                string sub = s.substr(0,j) + s.substr(j+1,s.size());

                dfsRemove(sub,ret,break_index,j,par);
            }
       
        }
        return;
    }

    string s_copy = s;

    reverse(s_copy.begin(),s_copy.end());

    if(par[0] == '('){
        cout << " need to reverse" <<endl;
        vector<char> parR = { ')','('};
        dfsRemove(s_copy,ret,0,0,parR);

        
    }else{
        ret.push_back(s_copy); 
    }

}
vector<string> removeInvalidParentheses(string s) {
    vector<char> par;
    par.resize(2);
    par[0] = '(';
    par[1] = ')';
    vector<string> ret;
    dfsRemove(s,ret,0,0,par);
    return ret;
    
}
Пример #3
0
Файл: app.c Проект: HsuJv/Note
int main(int argc, char* argv[]){
    const char* options[] = {"-u", "upload", "-d", "download", \
        "-h", "help", "-l", "list", "-r", "remove", 0};
    int op;

    if (argc != 3 && argc != 2){
        helpInfo();
        return 0;
    }
    
    op = getOption(options, argv[1]);
    switch(op){
        case 0:
        case 1:
            if (argc == 2){
                fprintf(stdout, "Please input the filename!\n");
                exit(0);
            }
            if (access(argv[2], R_OK)){
                fprintf(stdout, "File '%s' not exists,\n", argv[2]);
                fprintf(stdout, "Or permession denied.\n");
                fprintf(stdout, "Please check the filename.\n");
                exit(0);
            }
            if(!uploadFile(argv[2]))
                fprintf(stdout, "Upload %s success\n", argv[2]);
            break;
        case 2:
        case 3:
            if (argc == 2){
                fprintf(stdout, "Please input the filename!\n");
                exit(0);
            }
            if(!downloadFile(argv[2]))
               fprintf(stdout, "Downloadload %s success\n", argv[2]);
            break;
        case 4:
        case 5:
            helpInfo();
            break;
        case 6:
        case 7:
            if (argc == 2){
                fprintf(stdout, "Please input the filename!\n");
                exit(0);
            }
            dfsList(argv[2]);
            break;
        case 8:
        case 9:
            if (argc == 2){
                fprintf(stdout, "Please input the filename!\n");
                exit(0);
            }
            if (!dfsRemove(argv[2]))
                fprintf(stdout, "Delete %s success\n", argv[2]);
            break;
        default:
            exit(-1);
    }
    exit(0);
}