力扣 題目28-- 實現 strStr()
阿新 • • 發佈:2022-04-16
題目
題解
一開始 不匹配所以往右移動
這時匹配成功 雙方同時移動 當然上面的位置要保留要用其他變數去移動(如果雙方同時移動過程中有不匹配直接break即可 然後將needle恢復至0 haystack從紅色箭頭繼續遍歷)
本來應該這時就結束了 但是因為我寫的判斷成功就會向右移動 所以最後應該是
即當下標相差為needle的長度時 直接返回紅色箭頭所在位置即可
當 needle
是空字串時,我們應當返回0 所以加個判斷
程式碼
1 #include<iostream> 2 #include<string> 3 using namespaceView Codestd; 4 class Solution { 5 public: 6 int strStr(string haystack, string needle) { 7 if (haystack == "") { 8 return 0; 9 } 10 int sign = 0; 11 for (int i = 0; i < haystack.size() - needle.size() + 1&& haystack.size()>= needle.size(); i++) {12 if (haystack[i] == needle[0]) { 13 sign = i; 14 for (int j = 0; j < needle.size();j++) { 15 if (haystack[sign] == needle[j]) { 16 sign = sign + 1; 17 } 18 else 19 {20 break; 21 } 22 } 23 if (sign - i == needle.size()) { 24 return i; 25 } 26 } 27 } 28 return -1; 29 } 30 }; 31 int main() { 32 string haystack = "abb"; 33 string needle = "bb"; 34 Solution sol; 35 int num=sol.strStr(haystack, needle); 36 cout << num << endl; 37 38 }