时间: 2020-11-22|40次围观|0 条评论

#include <iostream>
#include <stdio.h>
#include <cstring>
#define L 310
#define W 610
using namespace std;
char b[W][L],a[L];
int c[W],lena,lenb,dp[L];
int main()
{
int i,w,m,k,j;
scanf("%d %d",&w,&lena);
scanf("%s",a);
for(i=0;i<w;i++)
{scanf("%s",b[i]);c[i]=strlen(b[i]);}
for (i=1;i<=lena;i++)
{
dp[i]=dp[i-1]+1;    //dp[i]表示前i个字符中需要删除的字符的个数
for (m=0;m<w;m++)
{
k=c[m]-1;
for (j=i-1;j>=0 && k>=0;j--)     
if (a[j]==b[m][k])
k--;
if (k<0)
dp[i]=min(dp[i],dp[j+1]+i-1-j-c[m]);    //i-1为j的初值,i-1-j为j走过的长度,而c[m]为模式串的长度,相减即为要删除的字符的个数
}
}
cout<<dp[lena]<<endl;
return 0;
}

转载于:https://www.cnblogs.com/You-Change/p/3415023.html

原文链接:https://blog.csdn.net/weixin_30342827/article/details/96888547

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《3267 不能匹配就跳过
   

还没有人抢沙发呢~