首页 > 其他分享 >动态规划(10)

动态规划(10)

时间:2024-02-20 10:56:18浏览次数:25  
标签:10 匹配 结尾 初始化 int 动态 规划 dp

目录

10 正则表达式

动态规划题目,找到动态规划的规律

  1. dp数组含义,dp[i][j]以i-1为结尾的s和以j为结尾的p能否匹配的上
    例如dp[5][4]的含义就是s[0..4]和p[0..3]能匹配上
  2. 初始化
    dp[0][0]一定为true不然整个dp数组全是false
    如果p形如a*c*b*因为这里*代表可以出现0次,所以dp[0][2] dp[0][4] dp[0][6]都为true
    这样我们得到初始化公式:
//初始化第一行,因为dp[0][2]如果p是a*也是可以匹配上的
for(int j=2;j<=m;j+=2)
{
  dp[0][j]=(dp[0][j-2]&&p[j-1]=='*');
}
  1. 递推公式
    这里有点难了
  • p[j-1]!=''
    不是
    的情况比较简单只需要考虑两种情况

    1. p[j-1]=='.'这时无论s[i-1]是什么都能匹配上,dp[i][j]=dp[i-1][j-1]&&p[j-1]=='.'
    2. p[j-1]==s[i-1] 正常匹配 dp[i][j]=dp[i-1][j-1]&&p[j-1]==s[i-1]
  • p[j-1]=='*'
    这里比较困难

    1. p[j-2]的字符出现了0次,无论p[j-2]是什么都无所谓,所以此时dp[i][j]=dp[i][j-2]
    2. p[j-2]的字符不是.而且再出现了所以dp[i][j]= dp[i-1][j]&&s[i-1]==p[j-2]
    3. 不理解gg
class Solution {
public:
    bool isMatch(string s, string p) {
        int n=s.length();
        int m=p.length();
        //dp含义,以i为结尾的s和以j为结尾的p能否匹配
        vector<vector<bool>> dp(n+1,vector<bool>(m+1,0));
        dp[0][0]=true;
        //初始化第一行,因为dp[0][2]如果p是a*也是可以匹配上的
        for(int j=2;j<=m;j+=2)
        {
            dp[0][j]=(dp[0][j-2]&&p[j-1]=='*');
        }

        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(p[j-1]=='*')
                {
                    if(dp[i][j-2])
                    {
                        dp[i][j]=true;
                    }
                    if(dp[i-1][j]&&s[i-1]==p[j-2])
                    {
                        dp[i][j]=true;
                    }
                    if(dp[i-1][j]&&p[j-2]=='.')
                    {
                        dp[i][j]=true;
                    }
                }
                else
                {
                    if(dp[i-1][j-1]&&p[j-1]=='.')
                    {
                        dp[i][j]=true;
                    }
                    else if(dp[i-1][j-1]&&s[i-1]==p[j-1])
                    {
                        dp[i][j]=true;
                    }
                }
            }
        }
         for(int i=0;i<=n;i++)
        {
            for(int j=0;j<=m;j++)
            {
                cout<<dp[i][j]<<' ';
            }
            cout<<endl;
        }
        return dp[n][m];
    }
};

标签:10,匹配,结尾,初始化,int,动态,规划,dp
From: https://www.cnblogs.com/liviayu/p/18022611

相关文章

  • 上海市促进 人工智能产业发展条例 (全文学习)2022年10月01日 本条例自2022年10月1日
    上海市促进人工智能产业发展条例(2022年9月22日上海市第十五届人民代表大会常务委员会第四十四次会议通过)第一章 总则  第一条 为了促进人工智能产业高质量发展,强化新一代人工智能科技创新策源功能,推动人工智能与经济、生活、城市治理等领域深度融合,打造人工智能世界级产业......
  • 10.【2024初三集训模拟测试2】
    \(\Huge打了一场模拟赛,又垫底了。qwq\)2024初三集训模拟测试1不会有人比本蒟蒻更蒻了\(qwq\)。T1小P的2048\(0pts\)\(\Large⚓⚓⚓\)\(\Large......
  • 洛谷P10179 题解
    题意简述给定\(n\)个点,要求构造出一棵树,同时有\(m\)个事件,第\(i\)个事件要求\(u_i\)和\(v_i\)用两条树边连接,即当中相隔一个点。若存在构造方案,输出Yes并输出其中一种方案,否则输出No。思维路径首先简化问题,假如我们想让一堆点互相相隔一个点,我们的做法。考虑菊花......
  • 【算法】【动态规划】最小路径和
    1 题目给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:一个机器人每次只能向下或者向右移动一步。示例1:输入:grid=[[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径1→3→1→1→1的总和最小。示例2......
  • int(1) 和 int(10) 有什么区别
    在mysql中int占4个字节,那么对于无符号的int,最大值是2^32-1=4294967295零填充一般int后面的数字,配合zerofill一起使用才有效。先看个例子:CREATETABLE`user`(`id`int(4)unsignedzerofillNOTNULLAUTO_INCREMENT,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT......
  • 嵌入式软件必读10本书_单片机篇
    大家好,我是知微!虽然现在网上的技术文章非常多,但缺点是知识点太零散。书籍是经过精心整理和编排的,仍旧是非常优秀的学习资料。下面一起来看看本文推荐的10本书吧!《啊哈C语言》这本书物融合了生动活泼的漫画、风趣幽默的文字,以浅显易懂的方式探讨编程思维。特别适合想要掌握C语......
  • 洛谷-P3380/LibreOJ-106/BZOJ-3196题解
    题意简述给定一个数列,支持以下操作:查询\(k\)在区间内的排名(区间内比\(k\)小的数的个数\(+1\))查询区间内排名为\(k\)的值修改某一位值上的数值查询\(k\)在区间内的前驱(前驱定义为严格小于\(k\),且最大的数,若不存在输出-2147483647)查询\(k\)在区间内的......
  • 二维动态规划
    62.不同路径力扣题目链接解题思路一个位置只能是左边的格子或者上面的格子到达,那么路径数就是左边格子的路径数加上上面格子的路径数代码实现intuniquePaths(intm,intn){intdp[101][101]={0};for(inti=1;i<=n;i++){//赋值最上面的格子,因为只......
  • 初中英语优秀范文100篇-084Friends-朋友
    PDF格式公众号回复关键字:SHCZFW084记忆树1Whatarefriends?翻译什么是朋友简化记忆朋友句子结构主语这个句子没有明确的主语,因为它是一个疑问句,询问的是“朋友是什么”或“什么是朋友”。在疑问句中,疑问词(如“what”)通常作为主语的位置,但在语义上并不真正充当主语......
  • 【Spring】【Mybatis】【Dynamic-Datasource】【事务】Spring + MyBaits + 事务 + 动
    1 前言我上次有一篇是讲了从一个数据库连接的角度分析了 Spring+MyBaits+事务三者的联系,这是在数据源固定的情况下。那么可能会遇到,比如按租户的分库,这种情况下我们会引入动态的数据源比如苞米豆团队的Dynamic-Datasource或者是自己公司内部封装的工具、框架等,这节我们......