N-40. String pattern matching
Description
字符串的模式匹配是一种常用的运算。所谓模式匹配,可以简单地理解为在目标(字符串)中寻找一个给定的模式(也是字符串),返回目标和模式匹配的第一个子串的首字符位置。通常目标串比较大,而模式串则比较短小。
对于字符串较长的模式匹配问题,我们可以使用克努特—莫里斯—普拉特操作(即KMP算法)解决,KMP算法的时间复杂度O(m+n).对于字符串较短的匹配问题,我们也可以使用简单算法解决。请解决如下字符串的模式匹配问题:
给定字符串S与T,规定S上操作REPLACE(i, x)表示为将S中第i个字符更改为x.
求最小操作次数a,使得T为S的子串。当任意次操作均不能使得T为S字串时,输出-1.
Input
两行,共两个字符串,即S、T.
Output
一行,即a的值。
思路
KMP算法比较复杂,在此不再赘述。
因为两个字符串长度较小,我们直接比较:
设b串的长度为n,
我们从a串开头遍历,每次比较n个数,更新一下cnt(相同字符的个数)
答案就是 n - cnt
#include <stdio.h>
#include <string.h>
int max (int a, int b) {
return a > b ? a : b;
}
int main () {
int ans = 0;
char s[110], t[110];
gets(s); gets(t);
int m = strlen(s), n = strlen(t);
if (m < n) printf("-1\n"); // 特判
else {
for (int i = 0; i <= m - n; i++) {
int cnt = 0;
for (int j = 0; j < n; j++)
if (s[i + j] == t[j]) cnt++;
ans = max(ans, cnt);
}
printf("%d\n", n - ans);
}
return 0;
}
本文作者:misasteria
本文链接:https://www.cnblogs.com/misasteria/p/16171412.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步