LeetCode - 实现strStr()

GitHub:https://github.com/biezhihua/LeetCode

题目

实现 strStr()

返回蕴含在haystack 中的 needle 的第一个字符的索引,如果 needle 不是 haystack 的一部分则返回 -1 。

例 1:

输入: haystack = "hello", needle = "ll"
输出: 2

例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1

解法

因为是判断needle是否存在于haystack中,那么就需要不断将needlehaystack中不同起始位置的串相比较,若比较成功返回haystack子串索引;若比较失败则继续开始新的haystack子串;若haystack子串比较完毕还没找到就输出错误结果。

值得注意的只有三个条件:

  1. 如何判断needlehaystack子串完全匹配
  2. 如何判断needlehaystack子串不同,需要继续匹配
  3. 如何判断needlehaystack中不存在匹配的串。

第一个条件:
needle遍历到末尾,且每个字符都和haystack子串字符相同时,代表找到匹配的串。

第二个条件:
needle遍历过程中,存在与haystack子串不同的字符时,需要重新获取haystack的子串进行匹配判断。

第三个条件:
haystackneedle恰好同时遍历到末尾,还未找到匹配串时,不存在匹配的串。

public int strStr(String haystack, String needle) {
   for (int i = 0; ; i++) {
        for (int j = 0; ; j++) {
            // 1. 当找到匹配的串
            if (j == needle.length()) return i;
            // 3. `haystack`和`needle`同时遍历完毕,还未找到匹配的串。
            if (i + j == haystack.length()) return -1;
            // 2. 遍历过程中存在不相同的字符时,从新取`haystack`的子串进行匹配
            if (needle.charAt(j) != haystack.charAt(i + j)) break;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/biezhihua/article/details/79754019