关注
#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;
}
查看原帖
点赞 评论
相关推荐
04-05 16:16
西安理工大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 这个offer值得去吗? #
20094次浏览 172人参与
# 上班苦还是上学苦呢? #
345096次浏览 2069人参与
# 联宝杯大学生创新大赛,你的技术值得产业级答案 #
47612次浏览 515人参与
# 如果春招能重来,我会___ #
21134次浏览 220人参与
# 实习怎么做才有更好的产出 #
49878次浏览 456人参与
# 除了线上,还能去哪些地方投简历 #
11334次浏览 115人参与
# 在爱玛,骑向未来 #
1464次浏览 161人参与
# AI coding的好用工具分享 #
88406次浏览 567人参与
# 找工作以来,你最看不惯__ #
79377次浏览 594人参与
# 大学四年该怎么过,才不算浪费时间? #
23828次浏览 106人参与
# 字节开奖 #
150254次浏览 679人参与
# 薪资爆料 #
422178次浏览 2226人参与
# 你觉得实习能学到东西吗 #
154091次浏览 1494人参与
# 你被哪些公司挂了? #
193206次浏览 1044人参与
# 双非应该如何逆袭? #
585657次浏览 6387人参与
# 毕业后不工作的日子里我在做什么 #
269049次浏览 1739人参与
# 一份好的简历长什么样? #
41868次浏览 505人参与
# 硬件人秋招的第一个offer #
129073次浏览 1472人参与
# 双非本科求职如何逆袭 #
1647778次浏览 13075人参与
# 刚工作的你,踩过哪些坑? #
46651次浏览 296人参与
# 面试线索爆料 #
130921次浏览 704人参与
# AI“智障”时刻 #
40338次浏览 193人参与
查看27道真题和解析