程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [leetcode]Implement strStr()

[leetcode]Implement strStr()

編輯:C++入門知識

Question: Implement strStr().   Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.     Anwser 1:  O(n*m) [cpp]  class Solution {   public:       char *strStr(char *haystack, char *needle) {           // Start typing your C/C++ solution below           // DO NOT write int main() function           int haylen = strlen(haystack);           int needlen = strlen(needle);                      for(int i = 0; i <= haylen - needlen; i++){               char *p = haystack + i;               char *q = needle;               while(*q != '\0'){                   if(*p != *q){                       break;                   } else {                       p++;                       q++;                   }               }                              if(*q == '\0'){                   return haystack + i;               }           }                      return NULL;       }   };       Anwser 2:  O(n + m) KMP [cpp]   class Solution {   public:       char *strStr(char *haystack, char *needle) {           // Start typing your C/C++ solution below           // DO NOT write int main() function           int haylen = strlen(haystack);           int needlen = strlen(needle);           int* fail = new int[needlen];           memset(fail, -1, needlen * sizeof(int));    // strlen(fail)                      int i, j, k;           for (i = 1; i < needlen; ++i) {               for (k = fail[i-1]; k >= 0 && needle[i] != needle[k+1]; k = fail[k]);               if (needle[k+1] == needle[i])                   fail[i] = k + 1;           }                      i = j = 0;                   while(i < haylen && j < needlen)      // while(haystack[i] && needle[j])           {               if (haystack[i] == needle[j])               {                   ++i;                   ++j;               }               else if(j == 0) ++i;               else j = fail[j-1] + 1;           }                      delete fail;                      /*          if (needle[j]) {              return NULL;          }  else {              return haystack + i - j;          }*/           if(j == needlen){               return haystack + i - j;           } else {               return NULL;           }       }   };      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved