码迷,mamicode.com
首页 > 其他好文 > 详细

Implement strStr()&BF&KMP

时间:2014-10-29 14:37:50      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   ar   for   sp   

Implement strStr().

Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.

思路:时间复杂度O(m*n),也就是BF(Brute Force)算法;

code:

bubuko.com,布布扣
class Solution {
public:
    char *strStr(char *haystack, char *needle) {
        if(!*needle)
            return haystack;
            
        char *p,*q;
        char *p_advance=haystack;
        
        for(q=&needle[1];*q;++q)
            ++p_advance;
            
        for(p=haystack;*p_advance;++p_advance)
        {
            char *p_old=p;
            q=needle;
            while(*p&&*q&&*p==*q)
            {
                ++p;
                ++q;
            }
            if(!*q)
                return p_old;
            p=p_old+1;
        }
        return NULL;
    }
};
View Code

 此问题还有更经典的KMP算法;

code:

bubuko.com,布布扣
class Solution {
public:
    char *strStr(char *haystack, char *needle) {
        if(!*needle)
            return haystack;
            
        int *next=new int[strlen(needle)];
        getNext(needle,next);
        
        for(int i=0,j=0;i<strlen(haystack);)
        {
            if(j==-1||haystack[i]==needle[j])
            {
                ++i;
                ++j;
            }
            else
                j=next[j];
            
            if(j==strlen(needle))
                return (char*)(i-strlen(needle)+haystack);
        }
        return NULL;
    }
    
    //array of next
    //as for char *s="ababa",the corresponding array is:-1,0,0,1,2
    void getNext(char *needle,int next[])
    {
        next[0]=-1;
        int k=-1;
        int j=0;
        while(j<strlen(needle)-1)
        {
            if(k==-1||needle[j]==needle[k])
            {
                ++j;
                ++k;
                next[j]=k;
            }
            else
                k=next[k];
        }
    }
};
View Code

KMP算法参考:

这篇文章对KMP原理有着清晰点的说明;

算法的实现可以参考这篇博文;

 

Implement strStr()&BF&KMP

标签:style   blog   http   io   color   os   ar   for   sp   

原文地址:http://www.cnblogs.com/chengyuz/p/4055114.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!