zoukankan      html  css  js  c++  java
  • 【noi 2.6_6252】带通配符的字符串匹配(DP)

    题意:给出一个带有通配符("?"可以代替一个字符,"*"可以代替零个或多个字符)的a字符串和一个不带通配符的b字符串,判断他们是否能够匹配。

    解法:f[i][j]表示a串的前i个是否能和b串的前j个匹配。其中,"?"由f[i-1][j-1]推出,"*"由f[i-1][0~j]推出,便用一个变量p存这些状态。

    疑问:我自认为可以写滚动数组的,可惜一直错,求助~ (>_<)

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 
     7 char s[25],ss[25];
     8 int f[25][25];
     9 
    10 int main()
    11 {
    12     scanf("%s%s",s+1,ss+1);
    13     int l=strlen(s+1),ll=strlen(ss+1);
    14     memset(f,0,sizeof(f));
    15     f[0][0]=1;
    16     for (int i=1;i<=l;i++)
    17     {
    18      bool p=f[i-1][0];
    19      if (s[i]=='*') f[i][0]=p;
    20      for (int j=1;j<=ll;j++)
    21      {
    22        p|=f[i-1][j];
    23        if (s[i]=='?'||s[i]==ss[j]) f[i][j]|=f[i-1][j-1];
    24        if (s[i]=='*') f[i][j]|=p;
    25      }
    26     }
    27     if (f[l][ll]) printf("matched");
    28     else printf("not matched");
    29     return 0;
    30 }
  • 相关阅读:
    WeakReference 在android中的应用
    安卓软键盘监听
    css常用布局
    centos升级vim
    修复svn hook导致的字符集错误
    centos上安装redmine
    nginx安装echo模块
    用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    tomcat配置https
    centos 升级nginx到1.10.2
  • 原文地址:https://www.cnblogs.com/konjak/p/5941778.html
Copyright © 2011-2022 走看看