leetcode algorithm-10
01 Sep 2020
|
|
本文主要对字符串的算法进行分析和整理,比如KMP,Manacher,Robin-karp,Sunny等算法。
Robin-karp, manacher, KMP算法
其中kmp的模板可以看下面的:
https://leetcode-cn.com/problems/shortest-palindrome/solution/zui-duan-hui-wen-chuan-by-leetcode-solution/
关于c++,这种写法:
int ViolentMatch(char* s, char* p)
{
int sLen = strlen(s);
int pLen = strlen(p);
int i = 0;
int j = 0;
while (i < sLen && j < pLen)
{
if (s[i] == p[j])
{
//①如果当前字符匹配成功(即S[i] == P[j]),则i++,j++
i++;
j++;
}
else
{
//②如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0
i = i - j + 1;
j = 0;
}
}
//匹配成功,返回模式串p在文本串s中的位置,否则返回-1
if (j == pLen)
return i - j;
else
return -1;
}
kmp的next数组求法:
private function getNext($word): array
{
$next = [-1];
$len = strlen($word);
$k = -1;
$j = 0;
while ($j < $len - 1) {
if ($k == -1 || $word[$j] == $word[$k]) {
$next[++$j] = ++$k;
} else {
$k = $next[$k];
}
}
return $next;
}
字符串算法:1392. Longest Happy Prefix
思路:Robin-Karp算法