28. 找出字符串中第一个匹配项的下标
- 1)题目
- 2)代码
- 1.方法一:每个字符进行匹配
- 2.方法二:截取字符串进行匹配
- 3)结果
- 1.方法一结果
- 2.方法二结果
1)题目
给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle
不是 haystack
的一部分,则返回 -1
。
示例 1:
输入:haystack = “sadbutsad”, needle = “sad”
输出:0
解释:“sad” 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。
示例 2:
输入:haystack = “leetcode”, needle = “leeto”
输出:-1
解释:“leeto” 没有在 “leetcode” 中出现,所以返回 -1 。
提示:
- 1 <= haystack.length, needle.length <= 104
- haystack 和 needle 仅由小写英文字符组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2)代码
1.方法一:每个字符进行匹配
public static int strStr(String haystack, String needle) {
if (haystack.length() < needle.length()) return -1;
int i = 0;
int j = 0;
int k = -1;
while (i < haystack.length() && j < needle.length()) {
if (haystack.charAt(i) == needle.charAt(j)) {
if (k == -1) k = i;
i++;
j++;
continue;
}
// needle从第二个字符开始有匹配不上的,k和j进行初始化
if (k != -1) {
i = k;
k = -1;
j = 0;
}
i++;
}
// haystack匹配结束,needle还有未匹配字符,返回-1
if (j != needle.length()) return -1;
return k;
}
2.方法二:截取字符串进行匹配
private static int str(String haystack, String needle) {
for (int i = 0; i < haystack.length(); i++) {
// haystack中与needle首字母相同的进入条件
if (haystack.charAt(i) == needle.charAt(0)) {
// 截取的字符下标超出字符串长度,直接返回-1
if (i + needle.length() > haystack.length()) return -1;
// 截取字符串与needle匹配,匹配则返回该字符串下标
if (needle.equals(haystack.substring(i, i + needle.length()))) return i;
}
}
return -1;
}