继续学习开始刷题;。。。
首先为什么要用kmp,我们遇到问题是在字符串s1 和字符串s2, 想在字符串s1中找到s2,返回s1中的起始位置。
比如
s1 = "ABABCABCD"
s2 ="ABCD"
返回结果是5
首先想到的是暴力匹配,发现相同的i++,j++,如果不相同i= i-j+1,j=0。直到 j的大小等于s2的长度。
看了好久好久才知道kmp的的意思,最后发现点击打开链接这个博客写的很清晰,而kmp则是不用重头来比较,而最重要的是求next数组
void Solution::GetNextArray( string needle )
{
next = new int[ needle.size() ];
next[ 0 ] = -1;
int i = 0;
int j = -1;
while( i<needle.size() )
{
if( j == -1 || needle[ i ] == needle[ j ] )
{
i++;
j++;
next[ i ] = j;
}
else
{
j = next[ j ];
}
}
}