首页 > 其他 > 详细

LeetCode OJ--Implement strStr()

时间:2014-02-15 04:19:08      阅读:486      评论:0      收藏:0      [点我收藏+]

http://oj.leetcode.com/problems/implement-strstr/

判断一个串是否为另一个串的子串

比较简单的方法,复杂度为O(m*n),另外还可以用KMP时间复杂度为O(m+n),之前面试的时候遇到过。

bubuko.com,布布扣
class Solution {
public:
    bool isEqual(char *a,char *b)
    {
        char* chPointer = a;
        char* chPointer2 = b;
        while(*chPointer2!= \0 && *chPointer!=\0 )
        {
            if(*chPointer == *chPointer2)
            {
                chPointer++;
                chPointer2++;
            }
            else
                return false;
        }
        return true;
    }
    char *strStr(char *haystack, char *needle) {
        char* chPointer = haystack;
        char* chPointer2 = needle;
        if(haystack == NULL || needle ==NULL || haystack =="")
            return NULL;
        while(chPointer)
        {
            if(isEqual(chPointer,needle))
                return chPointer;
            chPointer++;
        }
        return NULL;
    }
};
bubuko.com,布布扣
bubuko.com,布布扣
class Solution {
public:
    void compute_prefix(const char* pattern,int next[])
    {
        int i;
        int j = -1;
        const int m = strlen(pattern);
        next[0] = j;
        for(i =1;i<m;i++)
        {
            while(j>-1 && pattern[j+1] != pattern[i]) j = next[j];
            if(pattern[i]== pattern[j+1])
                j++;
            next[i] = j;
        }
    }
    int kmp(const char* text , const char* pattern)
    {
        int i;
        int j = -1;
        const int n = strlen(text);
        const int m = strlen(pattern);
        if(n == m && m==0)
            return 0;
        if(m == 0)
            return 0;
        int *next = (int *)malloc(sizeof(int) * m);
        
        compute_prefix(pattern, next);

        for(i = 0;i <n;i++)
        {
            while(j >-1 && pattern[j+1] != text[i])
                j = next[j];
            if(text[i] == pattern[j+1]) j++;
            if(j==m-1)
            {
                free(next);
                return i-j;
            }
        }
    }
    char *strStr(char *haystack, char *needle) {
       int position = kmp(haystack,needle);
       if(position == -1)
           return NULL;
       else
           return (char*)haystack + position;
    }
};
bubuko.com,布布扣

LeetCode OJ--Implement strStr()

原文:http://www.cnblogs.com/qingcheng/p/3549679.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!