字符串简单1 种解法
#28找出字符串中第一个匹配项的下标
返回 needle 在 haystack 中首次完整出现的起始下标,不存在则返回 -1。
#字符串#字符串匹配
解题主线
01
起点最多枚举到 n - m;从每个候选起点向后逐字符核对。
解法 1:朴素字符串匹配
枚举每个可能起点,并比较长度为 m 的窗口。
时间复杂度
O((n - m + 1) × m) 最坏
空间复杂度
O(1)
java
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