int next[110];
next[0]=-1; //由于书上的字符串是以1开头所以next[0]=0,而我是以0开头,所以next[0]=-1,至于为啥,我觉得自己手动算下应该就明白了
int i=0;
int j=-1; //重点!!!!!
int len1=strlen(s1);
int len2=strlen(s2);
while(i<len2)
{
if(j==-1||s2[i]s2[j]) //由于next[0]=-1,所以对j-1特判下
{
++i;
++j;
next[i]=j;
}
else
{
j=next[j];
}
}
i=0;
j=0;
while(i<len1&&j<len2)
{
if(s1[i]s2[j]||j-1) //同样由于next[0]=-1的存在
{
++i;
++j;
}
else
{
j=next[j]; //这里就不需要指针回溯,大大降低了时间复杂度
}
}
if(j==len2)
{
printf(“%d\n”,i-len2+1);
}
else
printf(“0\n”);
}
return 0;
}
KMP算法模式串匹配:
// KMP算法模式串匹配
#include <bits/stdc++.h>
using namespace std;
int main()
{
char a[105];
char b[1005];
memset(a, ‘\0’, sizeof(a));
memset(b, ‘\0’, sizeof(b));
while (~scanf(“%s%s”, a, b))
{
int next[105] = {0};
scanf(“%s%s”, a, b);
int i = 1, j = 0;
while (i < strlen(a))
{
if (a[i] == a[j])
next[i++] = ++j;
else
{
if (j > 0)
j = next[j - 1];
else
i++;
}
}
for (int i = 0; i < strlen(a); ++i)
printf("%d ", next[i]);
printf(“\n”);
i = 0;
j = 0;
while (i < strlen(b))
{
if (a[j] == b[i])
{
++i;
++j;
if (j == strlen(a))
{
printf(“%d\n”, i - j);
j = next[j - 1];
}
}
else
{
if (j > 0)
j = next[j - 1];
else
++i;
}
}
memset(a, ‘\0’, sizeof(a));
memset(b, ‘\0’, sizeof(b));
}
return 0;
}
KMP算法模式串匹配(模式串下标从1开始):
#include <bits/stdc++.h>
using namespace std;
const int cmax = 1e3 + 5;
char str[cmax];
int nex[cmax];
char t[cmax];
void get_next(char T[])
{
int i = 1, j = 0, len = strlen(T) - 1;
nex[1] = 0;
while (i < len)
{
if (j == 0 || T[i] == T[j])
{
++i;
++j;
nex[i] = j;
}
else
j = nex[j];
}
}
int Index_KMP(char s[], char t[], int pos)
{
int i = pos, j = 1, slen = strlen(s) - 1, tlen = strlen(t) - 1;
while (i <= slen && j <= tlen)
{
if (j == 0 || s[i] == t[j])
{
i++, j++;
}
else
j = nex[j];
}
if (j > tlen)
return i - tlen;
else
return 0;
}
int main()
{
memset(str, ‘\0’, sizeof(str));
memset(nex, 0, sizeof(nex));
memset(t, ‘\0’, sizeof(t));
scanf(“%s%s”, t, str);
for (int i = strlen(str) - 1; i >= 0; i–)
str[i + 1] = str[i];
for (int i = strlen(t) - 1; i >= 0; i–)
t[i + 1] = t[i];
get_next(str);
int flag = Index_KMP(t, str, 1);
printf(“%d\n”, flag);
memset(nex, 0, sizeof(nex));
return 0;
}
BF算法模式串匹配:
// BF算法模式串匹配
#include <bits/stdc++.h>
using namespace std;
int main()
{
char a[105];
char b[1005];
memset(a, ‘\0’, sizeof(a));
memset(b, ‘\0’, sizeof(b));
while (~scanf(“%s%s”, a, b))
{
int alen = strlen(a), blen = strlen(b);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

Android高级架构师
由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记。
- 330页PDF Android学习核心笔记(内含上面8大板块)
-
Android学习的系统对应视频
-
Android进阶的系统对应学习资料
- Android BAT部分大厂面试题(有解析)
好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ftJ-1712659862431)]
[外链图片转存中…(img-BUfhO0Do-1712659862431)]
-
Android学习的系统对应视频
-
Android进阶的系统对应学习资料
[外链图片转存中…(img-RykyWjNM-1712659862431)]
- Android BAT部分大厂面试题(有解析)
[外链图片转存中…(img-qGueyWeZ-1712659862432)]
好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!