标签:string
Implement strStr().
Returns a pointer to the first occurrence of needle in haystack,or
class Solution { public: char *strStr(char *haystack, char *needle) { int hayLen = strlen(haystack); int needleLen = strlen(needle); int next[needleLen]; get_nextval(needle, next); if (hayLen == 0 && needleLen != 0) return NULL; if (hayLen == 0 || needleLen == 0) return haystack; int i = 0, j = 0; while(i < hayLen && j < needleLen) { if(haystack[i] != needle[j]) { if(next[j]!=-1) j=next[j]; else { j=0; i++; } } else { i++;j++; } } if(j==needleLen) return haystack+i-needleLen; return NULL; } void get_nextval(const char *T, int next[]) { int j = 0, k = -1; next[0] = -1; while ( T[j] != '\0' ) { if (k == -1 || T[j] == T[k]) //字符相等,或者是字符不相等且没有上一个匹配位置了 { ++j; ++k; if (T[j]!=T[k]) //前一个字符相等,这个字符不相等 next[j] = k; //下一次从k开始判断(因为k-1都已经匹配相等) else //相等,下一次开始判断的位置和k位置下次开始判断的位置相同 next[j] = next[k]; } else //字符不相等,模式串移到上一个匹配位置继续匹配 k = next[k]; } } };*****简单的字符串查找会造成Time limit exceeded*****
class Solution { public: char *strStr(char *haystack, char *needle) { int hayLen = strlen(haystack); int needleLen = strlen(needle); if (hayLen == 0 && needleLen != 0) return NULL; if (hayLen == 0 || needleLen == 0) return haystack; for(int i = 0; i< hayLen; i++) { int j = 0; for(; j< needleLen; j++) { if(haystack[j+i] != needle[j]) break; } if (j == needleLen) return &haystack[i]; } return NULL; } };
标签:string
原文地址:http://blog.csdn.net/joannae_hu/article/details/39523863