Example #1
0
 int strStr(char *haystack, char *needle) {
     if(needle[0] == '\0')
         return 0;
     int m = strlen(haystack);
     int n = strlen(needle);
     vector<int> nxt(n + 1);
     calNext(needle, n, nxt);
     int i = 0;
     int j = 0;
     while(i < m)
     {
         if(j == -1 || haystack[i] == needle[j])
         {
             ++i;
             ++j;
         }
         else
         {
             j = nxt[j];
         }
         if(j == n)
             return i - j;
     }
     return -1;
 }
Example #2
0
 string shortestPalindrome(string s) {
     if (s.size() <= 1)
         return s;
     string t = s;
     reverse(t.begin(), t.end());
     s = s+"#"+t;
     vector<int> next;
     calNext(next, s);
     s = t;
     reverse(s.begin(), s.end());
     return t.substr(0, t.size()-next.back()) + s;
 }