标签:style class blog code http ext
Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
思路:这是一道字符串匹配的函数,就是找出needle在haystack首次出现的位置。暴力解决,简单明了。
class Solution { public: char *strStr(char *haystack, char *needle) { int hay_len=strlen(haystack); int nee_len=strlen(needle); for(int i=0;i<=hay_len-nee_len;i++) { char *str=haystack+i; char *sub_str=needle; while(*sub_str!=‘\0‘) { if(*str==*sub_str) { str++; sub_str++; } else break; } if(*sub_str==‘\0‘) return haystack+i; } return NULL; } };
思路二:使用KMP算法。关键就是next函数如何得到。大家可以借鉴一下KMP算法之总结篇(12.09修订,必懂KMP和KMP字符串模式匹配详解,讲得很详细。
class Solution { public: void get_nextval(char *needle,int nextval[]) { int i=0; nextval[0]=-1; int j=-1; while(i<strlen(needle)) { if(j==-1||needle[i]==needle[j]) { i++; j++; nextval[i]=j; } else j=nextval[j]; } } char *strStr(char *haystack, char *needle) { int hay_len=strlen(haystack); int nee_len=strlen(needle); int i=0,j=0; int *nextval=new int[nee_len+1]; get_nextval(needle,nextval); while(i<hay_len&&j<nee_len) { if(j==-1||haystack[i]==needle[j]) { i++; j++; } else j=nextval[j]; } if(j==nee_len) return &haystack[i-nee_len]; return NULL; } };
Implement strStr(),布布扣,bubuko.com
标签:style class blog code http ext
原文地址:http://www.cnblogs.com/awy-blog/p/3790223.html