1321: [蓝桥杯2017初赛]正则问题
思路:遇到‘(’左括号进入递归,遇到‘)’右括号退出递归,遇到‘|’, 对tmp清零, 遇到‘x’, tmp++,由这些方法得到代码
还想了有点久,做蓝桥多了,cf都不会了,就只想着暴力,递归了。
难顶
string s;
int pos = 0;
int dfs(){
int tmp = 0, cnt = 0;
while(pos<s.length()){
if(s[pos]=='x'){
tmp++;
pos++;
}else if(s[pos]=='('){
pos++;
tmp += dfs();
}else if(s[pos]==')'){
pos++;
break;
}else if(s[pos]=='|'){
pos++;
cnt = max(cnt, tmp);
tmp = 0;
}
}
return max(cnt, tmp);
}
signed main(){
cin>>s;
cout<<dfs()<<endl;
return 0;
}
本文介绍了一种解决蓝桥杯2017初赛正则问题的思路,通过递归处理左括号和右括号,结合‘|’和‘x’来计数匹配项。在遇到‘|’时,更新最大计数值,最终返回结果。这种方法展示了在处理复杂正则表达式时如何运用递归和条件判断。
347

被折叠的 条评论
为什么被折叠?



