1 class Solution { 2 public: 3 int strStr(char *haystack, char *needle) { 4 5 int i = 0 , skip[256]; 6 char *str = haystack, *substr = needle; 7 int len_src = strlen(str), len_sub = strlen(substr); 8 // preprocess 9 for (i = 0; i < 256; i++) 10 skip[i] = len_sub; 11 int last = len_sub - 1; 12 for (i = 0; i < last;i++) 13 skip[substr[i]] = last - i; 14 // search 15 int pos = 0, j; 16 while (pos <= len_src-len_sub) { 17 j = last; 18 while (j>=0 && str[pos+j]==substr[j]) 19 j--; 20 if (j<0) 21 return pos; 22 pos += skip[str[pos+last]]; 23 } 24 return -1; 25 } 26 };