题目描述

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符
输入:
通配符表达式;
一组字符串。
输出:
返回匹配的结果,正确输出true,错误输出false

#include<string>
#include<iostream>
#include<vector>
using namespace std;
int match_string(string m_str,string w_str) //match wildcard 通配符
{
    int m_len = m_str.size();
    int w_len = w_str.size();
    vector<vector<int> > b_dp(w_len+1,vector<int>(m_len+1,0));
    //多加一行一列作为初始初值所用
    b_dp[0][0] = 1;
    for(int i=1;i <=w_len;i++)
    {
        char ch = w_str[i-1];
        设置每次循环的初值,即当星号不出现在首位时,匹配字符串的初值都为false
        b_dp[i][0] = b_dp[i-2][0]&&(ch=='*');
        for(int j=1;j<=m_len;j++)
        {
            char ch2 = m_str[j-1];
            if(ch=='*')
                b_dp[i][j]=b_dp[i-1][j]||b_dp[i][j-1]; //当匹配字符为*号时,状态取决于上面状态和左边状态的值
            else
                b_dp[i][j]=b_dp[i-1][j-1]&&(ch=='?'||ch2==ch);
        }
    }
    return b_dp[w_len][m_len];     
}
int main()
{
    string str1,str2;
    while(cin >> str1 >> str2)
    {
       int rst =  match_string(str2,str1);
       if(rst==1)
           cout << "true" << endl;
        else
           cout << "false" << endl;
    }
     
}

字符串通配符(动态规划)相关推荐

  1. 统计每个月兔子的总数,字符串通配符

    题目:统计每个月兔子的总数 题目描述 有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少? 本题有多组数据. 输入描述: ...

  2. 牛客- 字符串通配符

    链接: 字符串通配符 来源:牛客网 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索.数据库.正则表达式等领域.现要求各位实现字符串通配符的算法. 要求: 实现如下2个通配符: :匹配0个 ...

  3. 牛客网 字符串通配符

    做题链接:字符串通配符__牛客网 (nowcoder.com) 要求:实现如下2个通配符(不区分大小写): *   :匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同) ...

  4. cstring查找子字符串_动态规划6:两个字符串的最长连续公共子串

    本文和前一篇:动态规划5-两个字符串的最长公共子序列类似,但公共子串必须是连续的,子序列不需要连续 字符串a,长度为m:a[1].a[2].a[3].a[4]....a[m] 字符串b,长度为n:b[ ...

  5. leetcode97. 交错字符串(动态规划)

    给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbbca&quo ...

  6. 【LeetCode笔记】72. 编辑距离(Java、字符串、动态规划)

    文章目录 题目描述 思路 && 代码 O(n2n^2n2).O(n2n^2n2) 二刷 打卡第十三天- 题目描述 感觉和正则表达式匹配这道题很像:同样的两个字符串,同样的二维数组dp, ...

  7. 【LeetCode笔记】剑指 Offer 46. 把数字翻译成字符串(Java、字符串、动态规划、DFS)

    文章目录 题目描述 思路 && 代码 1. 动态规划做法 2. DFS 做法 二刷 打卡第六天~继续加油! 题目描述 万物皆可爬楼梯.-和爬楼梯原理很像,都是使用动态规划的做法来做~ ...

  8. 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 字符串处理+动态规划 合集!

    Attention 秋招接近尾声,我总结了 牛客.WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对.测试.欢迎食用 本 ...

  9. 【动态规划】字符串类型动态规划

    这里总结一下字符串类型的动态规划问题,一般涉及最值问题,方案数问题都可以使用动态规划来解决 最短编辑距离 这个问题显然是一个最优解问题,对于最优解问题我们可以考虑动态规划解题,因此我们得先考虑子问题, ...

  10. 剑指 Offer 46. 把数字翻译成字符串(动态规划+回溯+递归 解法)

    剑指 Offer 46. 把数字翻译成字符串 问题描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...

最新文章

  1. C#中String与byte[]的相互转换
  2. 关于Excel导入的问题记录
  3. hdu5444(2015长春网络赛H题)
  4. C# 在自定义的控制台输出重定向类中整合调用方信息
  5. 如何从Java EE无状态应用程序连接到MongoDB
  6. [Python]使用 lambda 函数
  7. [翻译]AKKA笔记 - DEATHWATCH -7
  8. 马斯克、吴恩达等27人出镜:AI可能成为不朽独裁者,人类就像蚂蚁束手就擒
  9. foreach 循环中删除一条数据_SQL Server中删除重复数据的几个方法
  10. 软件项目管理工具简介
  11. 线性代数知识点总结,基础概念和计算整理(手写版)
  12. 新趋势下的云计算安全行业前沿认证 | CCSK
  13. R语言学习-问题解决-Error in output$nodeID : $ operator is invalid for atomic vectors
  14. Pandas 筛选数据的 8 个神操作
  15. 英语学习——定语和状语
  16. java实验作业答案_JAVA实验作业 JAVA题目
  17. Java Web --HTML(尚硅谷2022版Javaweb)
  18. Mybatis动态sql和缓存
  19. 自控重点整理5.控制系统的频带宽度
  20. skip connections

热门文章

  1. inline-block从入门到精通
  2. ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)
  3. 在Winform开发框架中实现对数据库的加密支持
  4. css3技巧——产品列表之鼠标滑过效果(一)
  5. 批量建立域帐号,摆脱管理员的痛!(原创+实战)
  6. 荒野行动为什么不能获取服务器信息,荒野行动获取服务器信息一直不动 服务器信息0解决方法...
  7. 怎么加密高程点_珠峰咋有4个高度?专业测绘科技工作者解读珠峰高程测算过程...
  8. ThinkPHP实现文章上一篇和下一篇
  9. c++ 调用windows tts_有关调用约定的历史 – 第三部分
  10. 高斯混合模型聚类_高斯混合模型的解释及Python实现