关闭

kmp-----leetcode(Implement strStr() )

标签: leetcode刷题kmp
188人阅读 评论(0) 收藏 举报
分类:

继续学习开始刷题;。。。

首先为什么要用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 ];
        }
    }
}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1870次
    • 积分:123
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条