
【KMP】Ybt_子串拆分
发布日期:2021-05-07 22:47:32
浏览次数:18
分类:精选文章
本文共 754 字,大约阅读时间需要 2 分钟。
解
跟有点像。
改一改,每次跑一遍kmp,然后跳回的时候不用跳到最小,跳回到k或以上,且串B的长度>=1就行了。代码
#include#include #include #include using namespace std;string a, b;int j, n, l, k, kmp[1000010], f[1000010];long long ans;void work() { kmp[0] = kmp[1] = j = 0; n = a.size() - 1; for (int i = 2; i <= n; ++i) { while (a[i] != a[j + 1] && j) j = kmp[j]; if (a[i] == a[j + 1]) ++j; kmp[i] = j; l = j; while (l >= k) { if (l * 2 + 1 <= i) { ++ans; break; } l = kmp[l]; } } a.erase(1, 1); //删位}int main() { cin >> a; cin >> k; a = " " + a; while (a.size() > 2 * k + 1) work(); printf("%d", ans);}
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月25日 04时32分18秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Django认证系统并不鸡肋反而很重要
2021-05-09
快用Django REST framework写写API吧
2021-05-09
tep用户手册帮你从unittest过渡到pytest
2021-05-09
12张图打开JMeter体系结构全局视角
2021-05-09
学习版pytest内核测试平台开发万字长文入门篇
2021-05-09
Spring Cloud Stream如何消费自己生产的消息?
2021-05-09