首页 > 代码库 > Implement strStr()

Implement strStr()

Implement strStr().

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

思路:KMP算法算是忘得一干二净,回头有时间看看,自己实现了一个复杂度高的,即从源字串中第一个开始遍历,把目标字串的每一个字符和源字串比对,若相同则找到,若不同,则跳出内存循环,从源字串的第二个字符再开始比对。

收获:注意区分haystack=NULL和haystack=""的区别。实际上NULL即0,也就是空指针,所以当haystack=NULL的时候,它是不指向任何东西的,所对应的内存也是空的;

而当haystack="";等价于haystack="\0",此时该指针是确实指向了内存中某个区域的,所以我们对该指针进行操作,是不会出错的,而对空指针的任何操作都是没有定义的

特殊用例:haystack="\0";needle="\0";可以在haystack的第一个字符找到目标字符串,所以返回不是NULL,而是"",也即"\0".

代码:

class Solution {public:    char *strStr(char *haystack, char *needle) {        if(!haystack||!needle)            return NULL;        int len_h=strlen(haystack);        int len_n=strlen(needle);        if(len_h==0&&len_n==0)            return haystack;        else if(len_h!=0&&len_n==0)            return (haystack+len_h-1);        int i;        int org_i;        int j=0;        for(i=0;i<=len_h-len_n;++i)        {            org_i=i;            j=0;            while(org_i<len_h&&j<len_n&&(*(haystack+org_i)==*(needle+j)))            {                ++org_i;                ++j;            }            if(j==len_n)                return haystack+i;        }           return NULL;                }};

 

Implement strStr()