#include <stdio.h>
#include <iostream>
#include <string.h>
#include <string>
#include <algorithm>
using namespace std;
int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
int W,L;
while(~scanf("%d%d%*c",&W,&L))
{
int* dp=new int[L+1];
char* mesg=new char[L];
string* dict=new string[W];
cin>>mesg;
for(int i=0;i<W;i++)
cin>>dict[i];
dp[L]=0;
for(int i=L-1;i>=0;i--)
{
dp[i]=dp[i+1]+1;
for(int j=0;j<W;j++)
{
int len=dict[j].length();
if(len<=L-i&&dict[j][0]==mesg[i])
{
int pm=i;//pm是给出字符的当前位置
int pd=0;//字典中字符的位置
while(pm<L)
{
if(dict[j][pd]==mesg[pm++])//每次不管怎样给出的字符pm都加1
pd++;
if(pd==len)//如果字典中有字符被包含在字符串里面
{
dp[i]=min(dp[i],dp[pm]+pm-i-len);//dp公式pm-i-len 是i~pm中错误的个数
break;
}
}
}
}
}
cout<<dp[0]<<endl;
}
return 0;
}
poj 3267 The Cow Lexicon
最新推荐文章于 2021-07-12 12:53:54 发布