编辑距离(线性DP+暴力匹配)
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编辑距离(线性DP+暴力匹配)相关的知识,希望对你有一定的参考价值。
题目链接
https://www.acwing.com/problem/content/901/
思路
其实这一道题的思路和上一道题是一样的,只不过我们对于每一次询问需要做n次匹配判断,如果当前的操作次数低于k那么说明我们这个字符串是合法的,关于怎么匹配俩字符串的最低花费次数,我们可以上一篇:最小编辑距离
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n,m;
char a[N][15],b[20];
int f[20][20],la[N];
int main()
cin>>n>>m;
for(int i = 1;i <= n; ++i)
cin>>(a[i]+1);
la[i]=strlen(a[i]+1);
while(m--)
int cnt;
cin>>(b+1)>>cnt;
int lb = strlen(b+1);
int ans = 0;
for(int i = 1;i <= n; ++i)
//初始化
for(int j = 0;j <= la[i]; ++j) f[j][0] = j;
for(int j = 0;j <= lb; ++j) f[0][j] = j;
for(int j = 1;j <= la[i]; ++j)
for(int k = 1;k <= lb; ++k)
f[j][k] = min(f[j-1][k]+1,f[j][k-1]+1);
if(a[i][j] == b[k]) f[j][k] = min(f[j-1][k-1],f[j][k]);
else f[j][k] = min(f[j-1][k-1] + 1,f[j][k]);
if(f[la[i]][lb] <= cnt) ans++;
cout<<ans<<endl;
return 0;
以上是关于编辑距离(线性DP+暴力匹配)的主要内容,如果未能解决你的问题,请参考以下文章