首页 > 其他分享 >递归与回溯_正则问题()|x

递归与回溯_正则问题()|x

时间:2023-04-05 14:13:56浏览次数:42  
标签:递归 int xx 正则 str 回溯

acwing 1225 正则问题(递归回溯)

考虑一种简单的正则表达式:

只由 x ( ) | 组成的正则表达式。

小明想求出这个正则表达式能接受的最长字符串的长度。

例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。

思路:遇到 '(' '|' 就进行递归,遇到 ')' 就进行回溯,每次递归 dfs() 计算的是该次递归所遇到的所有 '*' 的数目

注意:由于是对字符串进行递归,每次遇到一个符号都要进行索引指针+1,但是可能由 '|' 进行多次的递归调用,而在一个 ')' 处回溯,
所以在 ')' 处不能进行索引指针的自增(因为可能会自增好多次),正确的应该是由对应递归的发起者进行负责回溯点的索引指针的自增。

#include<iostream>

using namespace std;
string str;
int k=0;

int dfs()
{
    int n=str.size();
    int res=0;
    while(k<n)
    {
        if(str[k]=='(')
        {
            k++;
            res+=dfs();
            k++;
        }
        else if(str[k]=='|')
        {
            k++;
            res=max(res,dfs());
        }
        else if(str[k]==')')
        {
            //k++;
            break;
        }
        else 
        {
            res++,k++;
        }
    }
    return res;
}

int main()
{
    cin>>str;
    cout<<dfs();
}

标签:递归,int,xx,正则,str,回溯
From: https://www.cnblogs.com/ccag/p/17289349.html

相关文章

  • 算法问题——动态规划和回溯算法问题
    回溯算法树形问题排列问题组合问题二位平面的回溯算法回溯递归问题树形问题17.电话号码的字母组合(全排列的问题)/***Copyright(C),2018-2020*FileName:letterCombinations*Author:xjl*Date:2020/3/2015:30*Description:给定一个仅包含数字2-9的字......
  • PHP正则表达式
    验证邮箱格式复制代码//验证邮箱格式functioncheckEmail($email){if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)){returnfalse;}else{returntrue;}}复制代码验证URL复制代码//验证URLfunctioncheckWebsite($we......
  • 常用正则表达式
    一、校验数字数字:^[0-9]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$正数、负数、和小数:^(\-|\+)?\d......
  • js 递归遍历树形结构数据,返回新的数组
    工作中,我们经常会遇到这样的情况:后端返回的数组,只需要取name、value生成新的数组,或者是将某个属性名修改,生成新的数组。递归是一种常见的解决问题的方法,即把问题逐渐简单化。“递归”的基本思想是:自己调用自己。实例如下handleDg(arrs,that){arrs.map((item,index)......
  • 最长连续序列(并查集、数组)、复原 IP 地址(字符串、回溯)、删除链表的倒数第 N 个结
    最长连续序列(并查集、数组)给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)__的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4......
  • ASP正则匹配方法
    ASP正则匹配方法  方法二:找到匹配的进行替换ip="127.0.0.1"FunctionReplaceTest(str,patrn,replStr) DimregEx,str1 SetregEx=NewRegExp regEx.Pattern=patrn regEx.IgnoreCase=True ReplaceTest=regEx.Replace(str,replStr)EndFunctionre......
  • (4.3)数组、对象及类数组对象,set的用法,正则表达式的常用方法,蓝桥杯备赛-(生成数组、数
    1.1数组、对象及类数组对象1.数组:​ 数组是有序的数据集合,其中的索引值从0开始递增,并且数组有length属性,可以获取数组内的元素个数,其中的值可以是任何的数组类型。2.对象:​ 对象是无序的是由一个或多个键值对组成的数据集合,对象没有length属性。3.伪数组(类数组对象):​ ......
  • JS正则判断6位数字
    JS正则判断6位数字原文链接:https://zhidao.baidu.com/question/56711626.html正则表达式:^\d{6}$注意写法,javascript里正则表达式的写法为/^\d{6}$/,其它的都为"^\d{6}$"。<scriptlanguage="javascript">functioncheckfrom(){varnum=document.getElementById("text&qu......
  • 2023_3_19正则表达式
    (1)? 通配符匹配文件名中的0个或1个字符。而 * 通配符匹配零个或多个字符。^ 为匹配输入字符串的开始位置。[0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。(2)地图接口:百度地图接口......
  • 【论文速递】PR2023 - 基于自正则原型网络的小样本语义分割
    【论文速递】PR2023-基于自正则原型网络的小样本语义分割【论文原文】:Self-RegularizedPrototypicalNetworkforFew-ShotSemanticSegmentation获取地址:https://arxiv.org/pdf/2210.16829.pdf博主关键词:小样本学习,语义分割,自正则,原型网络摘要:用于图像语义分割的深度cnn通常......