找出字符串中第一个匹配项的下标
给你两个字符串 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
实现思路:
此题比较简单,就是检查 haystack
是否包含needle字符串,如果包含则返回第一个匹配的字符位置,如果不匹配则返回-1,Java中有一个内置的方法indexOf()恰好实现该功能。
实现代码:
public int strStr(String haystack, String needle) {
// 如果needle是空字符串,根据约定返回0
if (needle.isEmpty()) {
return 0;
}
// 使用Java内置的indexOf方法查找子字符串
int index = haystack.indexOf(needle);
// 如果没有找到,indexOf会返回-1
return index;
}
知识补充:
在Java中,indexOf
是 String
类的一个方法,用于查找子字符串(needle
)在字符串(haystack
)中第一次出现的索引。如果找到子字符串,indexOf
返回它在父字符串中的位置索引;如果没有找到,它返回 -1
。
以下是 indexOf
方法的一些常见用法:
-
基本使用:
int index = haystack.indexOf(needle);
这将返回子字符串
needle
在字符串haystack
中第一次出现的索引。 -
从特定索引开始搜索:
int index = haystack.indexOf(needle, 5);
这将从索引
5
开始在haystack
中搜索needle
,返回从该索引开始的第一次出现的索引。 -
忽略大小写的搜索:
int index = haystack.indexOf(needle, 0); if (index == -1) { // 转换为全小写再搜索 index = haystack.toLowerCase().indexOf(needle.toLowerCase()); }
toLowerCase()
是String
类的一个方法,用于将字符串中的所有字符转换为小写。这个方法不改变原始字符串,因为它返回一个新的字符串,其中包含转换后的小写字符。indexOf
方法本身不提供直接忽略大小写的选项,但可以通过转换两个字符串为全小写或全大写后再进行搜索。
注意:indexOf
方法是区分大小写的,并且它按照从左到右的顺序搜索,一旦找到匹配的子字符 串,就会停止搜索并返回索引。