关注
#include <iostream>
#include <string>
using namespace std;
int b_force_match(string str, string ptr)
{
int i, j, temc;
int tlen = ptr.length();
int plen = str.length();
for (i = 0, j = 0; i <= plen - tlen; i++)
{
temc = i;
j = 0;
while (str[temc] == ptr[j] && j < tlen)
{
temc++;
j++;
}
if (j == tlen)
return i;
}
return -1;
}
void clnext(string str, int *next)
{
int len=str.length();
next[0] = -1;
int k = -1;
for (int q = 1; q < len; q++)
{
while (k > -1 && str[k + 1] != str[q])
k = next[k];//回溯
if (str[k + 1] == str[q])
k++;
next[q] = k;
}
}
int KMP(string str,string ptr)
{
int slen=str.length();
int plen=ptr.length();
int *next = new int[plen];
clnext(ptr, next);
int k = -1;
for (int i = 0; i < slen; i++)
{
while (k >-1&& ptr[k + 1] != str[i])
k = next[k];
if (ptr[k + 1] == str[i])
k = k + 1;
if (k == plen-1)
{
delete next;
return i-plen+1;
}
}
delete next;
return -1;
}
int main()
{
string str = "ahraaahahafafderqhgadgdfghadfhnmym,,aryzkiababaabaftyacfabaou";
string ptr = "ababaabaf";
cout << "patternmatch" << endl;
cout << "b_force:" << endl;
cout << b_force_match(str, ptr) << endl;
cout<<"KMP:"<<endl;
cout << KMP(str, ptr) << endl;
return 0;
}
查看原帖
点赞 评论
相关推荐
10-30 16:31
重庆大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# mt对你说过最有启发的一句话 #
22180次浏览 286人参与
# 机械/制造每日一题 #
79602次浏览 1407人参与
# 秋招被挂春招仍然能投的公司 #
3590次浏览 53人参与
# 你怎么看待AI面试 #
128484次浏览 724人参与
# 摸鱼被leader发现了怎么办 #
88478次浏览 590人参与
# 工作以后,你父母对你啥态度 #
21949次浏览 160人参与
# 求职遇到的搞笑事件 #
151218次浏览 882人参与
# 秋招特别不鸣谢 #
10159次浏览 141人参与
# 2025,我想...... #
80171次浏览 638人参与
# 什么是优秀的实习经历 #
4751次浏览 160人参与
# 今年秋招你收到了多少封邮件? #
14078次浏览 178人参与
# 选实习,你更看重哪方面? #
8270次浏览 175人参与
# 工作中遇到的歹人 #
19106次浏览 245人参与
# 工作后,你落下了哪些病根 #
8505次浏览 159人参与
# 实习简历求拷打 #
828次浏览 24人参与
# 快手求职进展汇总 #
698130次浏览 7034人参与
# 找工作有哪些冷知识 #
202570次浏览 2586人参与
# 被上班搭子“传染”了哪些习惯 #
3492次浏览 77人参与
# 工作丧失热情的瞬间 #
339266次浏览 2495人参与
# 打工人的精神状态 #
122318次浏览 1423人参与



腾讯音乐娱乐集团公司福利 285人发布