速度一定要比普通遍历方法快,求大佬🧍♂️
1条回答 默认 最新
- Clarence Liu 2021-07-02 21:00关注
#include <iostream> #include <cstring> using namespace std; const int MAXN = 2e5 + 100; int Next[MAXN]; int ans = 0; void Priefix_Table(string pattern){ Next[0] = Next[1] = 0; int j; int len = pattern.length(); for(int i=1;i<len;i++){ j = Next[i]; while(j && pattern[i] != pattern[j]) j = Next[j]; if(pattern[i] == pattern[j]) Next[i+1] = j + 1; else Next[i+1] = 0; } } void KMP(string text, string pattern){ int len_text = text.length(); int len_pattern = pattern.length(); int j=0; for(int i=0;i<len_text;i++){ while(j && text[i] != pattern[j]) j = Next[j]; if(text[i] == pattern[j]) j++; if(j == len_pattern) ans++; } } int main(){ string s1, s2; cin >> s1 >> s2;//s1为父串,s2为子串 Priefix_Table(s2); KMP(s1, s2); cout << ans; return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 CATIA有些零件打开直接单机确定终止
- ¥15 请问有会的吗,用MATLAB做
- ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
- ¥15 ARIMA模型时间序列预测用pathon解决
- ¥15 孟德尔随机化怎样画共定位分析图
- ¥18 模拟电路问题解答有偿速度
- ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
- ¥15 误删注册表文件致win10无法开启
- ¥15 请问在阿里云服务器中怎么利用数据库制作网站
- ¥60 ESP32怎么烧录自启动程序,怎么查看客户esp32板子上程序及烧录地址