前言
思路及算法思维,指路 代码随想录。
题目来自 LeetCode。
day 9,KMP,真的会不了一点~
题目详情
[28] 实现strStr()
题目描述
解题思路
前提:字符串匹配
思路:KMP算法。
重点:next数组的初始化;利用next数组进行匹配;满足要求的退出条件。
代码实现
C语言
暴力
int strStr(char* haystack, char* needle) {
bool found = false;
if (strlen(haystack) < strlen(needle))
{
return -1;
}
for (int i = 0; i < strlen(haystack) - strlen(needle) + 1; i++)
{
int tmp = i;
int j = 0;
for (j = 0; j < strlen(needle); j++)
{
if (needle[j] != haystack[tmp])
{
break;
}
tmp++;
}
if (j == strlen(needle))
{
found = true;
return i;
}
}
return -1;
}
暴力
void getNext(int *next, const char *strstr)
{
// next数组代表相同前后缀位置
int j = -1;
next[0] = j;
for (int i = 1; i < strlen(strstr); i++)
{
// 元素与相同前后缀的后一