正则问题

字符串处理,采用递归的方法

需要注意的是最后两个测试数据的括号是不匹配的,这要求我们在proc函数处理完之后,如果tmp(记录括号的字符串变量)的size大于0时,直接把tmp拉进去递归

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <string.h>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>

#define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 3000
#define MAX 0x06FFFFFF
#define V vector<int>

using namespace std;

int  proc(string s){
//    puts(s.c_str());
    int inKH=0,i;
    string tmp; 
    int cnt=0;
    vector<int> v;
    for(i=0;i<s.size();i++){
        if(s[i]=='(') inKH++;
        if(s[i]==')'){
            inKH--;
            if(inKH==0){
                cnt+=proc(tmp.substr(1,tmp.size()-1));
                tmp="";
                continue;
            }
        }
        if(inKH){
            tmp+=s[i];
            continue;
        } 
        if(s[i]=='x'){
            cnt++;
        }else if(s[i]=='|'){
            v.push_back(cnt);
            cnt=0;
        }
    }
    if(tmp.size())
        cnt+=proc(tmp.substr(1,tmp.size()-1));
    v.push_back(cnt);
    return * max_element(v.begin(),v.end());
}

int main(){
//    freopen("D:/CbWorkspace/blue_bridge/正则问题.txt","r",stdin);
    char buf[200];
    gets(buf);
    string s(buf);
    printf("%d",proc(s));
    return 0;
}
原文地址:https://www.cnblogs.com/TQCAI/p/8458083.html