首页 > 代码库 > Implement strStr()
Implement strStr()
-----QUESTION-----
Implement strStr().
Returns a pointer to the first occurrence of needle in haystack,or
-----SOLUTION-----
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; } };
Implement strStr()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。