字符串简单1 种解法

#28找出字符串中第一个匹配项的下标

返回 needle 在 haystack 中首次完整出现的起始下标,不存在则返回 -1。

#字符串#字符串匹配

解题主线

01

起点最多枚举到 n - m;从每个候选起点向后逐字符核对。

解法 1朴素字符串匹配

枚举每个可能起点,并比较长度为 m 的窗口。

时间复杂度

O((n - m + 1) × m) 最坏

空间复杂度

O(1)

28. 找出字符串中第一个匹配项的下标 · 朴素字符串匹配
final class Solution {
    public int strStr(String haystack, String needle) {
        int n = haystack.length();
        int m = needle.length();
        for (int start = 0; start + m <= n; start++) {
            int offset = 0;
            while (offset < m && haystack.charAt(start + offset) == needle.charAt(offset)) {
                offset++;
            }
            if (offset == m) return start;
        }
        return -1;
    }
}

枚举每个可能起点,并比较长度为 m 的窗口。

边界与易错点

  • needle 为空时按题意返回 0。
  • needle 比 haystack 长时循环不执行,应自然返回 -1。
整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

easy/Q028_strStr.java