1. 程式人生 > 其它 >力扣 題目28-- 實現 strStr()

力扣 題目28-- 實現 strStr()

題目


題解


 

一開始 不匹配所以往右移動

這時匹配成功 雙方同時移動 當然上面的位置要保留要用其他變數去移動(如果雙方同時移動過程中有不匹配直接break即可 然後將needle恢復至0 haystack從紅色箭頭繼續遍歷)

本來應該這時就結束了 但是因為我寫的判斷成功就會向右移動 所以最後應該是

 

 

即當下標相差為needle的長度時 直接返回紅色箭頭所在位置即可

當 needle 是空字串時,我們應當返回0 所以加個判斷

程式碼


 1 #include<iostream>
 2 #include<string>
 3 using namespace
std; 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 }
View Code