正则表达式笔试题,正则表达式选择题答案

  正则表达式笔试题,正则表达式选择题答案

  请实现一个函数来匹配正则表达式,包括“.”和“*”。

  字符“.”在模式中表示任何字符,而 * 表示它之前的字符可以出现任意次(包括0次)。

  在本主题中,匹配意味着字符串的所有字符都匹配整个模式。

  例如,字符串“aaa”匹配模式“a.a”和“ab*ac*a”,但不匹配“aa.a”或“ab*a”。

  样品

  输入:

  s=aa

  p=a*

  输出:真实思维(动态编程)

  状态:f[i][j]表示P从J开始到末端,是否能匹配S从I到末端。

  状态转换:

  如果p[j 1]不是通配符 * ,那么f[i][j]为真当且仅当s[i]能匹配p[j]且f[i 1][j 1]为真;如果p[j 1]是通配符 * ,那么只要有下列条件之一,f[i][j]就为真;F[i][j 2]为真;这意味着0 p[j] s[i]可以匹配p[j],f[i 1][j]为真;第一种情况的状态转换很好理解,但是第二种情况的状态转换呢?

  最直观的转移方式如下:枚举通配符 * 可以匹配多少个p[j],只要有一种情况可以匹配,那么f[i][j]为真;

  这样我们发现f[i][j]枚举0 p[j],其他所有枚举都包含在f[i 1][j]中,所以我们只需要判断

  f[i 1][j]是否为真,s[i]是否能匹配p[j]。

  时间复杂度分析:表示的长度,p的长度,总状态,状态转换复杂度,所以总时间复杂度为。

  代码类解决方案{

  公共:

  vector vector int f;

  int n,m;

  bool isMatch(字符串s,字符串p) {

  n=s . size();

  m=p . size();

  f=向量向量int(n ^ 1,向量int(m ^ 1,-1));

  返回dp(0,0,s,p);

  }

  bool dp(int x,int y,string s,string p)

  {

  if (f[x][y]!=-1)返回f[x][y];

  如果(y==m)

  返回f[x][y]=x==n;

   bool first _ match=x n(s[x]==p[y] p[y]==。);

  布尔ans

  if (y 1 m p[y 1]==* )

  {

  ans=dp(x,y ^ 2,s,p) first _ match DP(x ^ 1,y,s,p);

  }

  其他

  ans=first_match dp(x 1,y 1,s,p);

  返回f[x][y]=ans;

  }

  };

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: