题意:

image.png

解题思路:

  1. 时间复杂度:O(M*N)
  2. 思路:
  3. 1. haystack 的每个位置暴力匹配子串 needle
  4. 2. 如果相等,则向后继续匹配,不等的话,子串从0开始,继续匹配;
  5. 3. 最后返回i - j的区间长度;

PHP代码实现:

  1. class Solution {
  2. function strStr($haystack, $needle) {
  3. $i = 0; $j = 0;
  4. while (isset($haystack[$i]) && isset($needle[$j])) {
  5. if ($haystack[$i] == $needle[$j]) {
  6. $i++;$j++;
  7. } else {
  8. $i = $i - $j + 1;
  9. $j = 0;
  10. }
  11. }
  12. return $j == strlen($needle) ? ($i - $j) : - 1;
  13. }
  14. }

GO代码实现:

  1. func strStr(haystack string, needle string) int {
  2. l1 := len(haystack)
  3. l2 := len(needle)
  4. if l2 == 0 { return 0 }
  5. if l1 == 0 || l1 < l2 { return -1 }
  6. for i := 0; i <= l1 - l2; i++ {
  7. if haystack[i : i + l2] == needle {
  8. return i
  9. }
  10. }
  11. return -1
  12. }