这是我参与8月更文挑战的第二十一天,活动详情查看:8月更文挑战
28. 实现 strStr()
题目描述
实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 ****。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
示例
示例 1:
输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:
输入: haystack = "aaaaa", needle = "bba"
输出: -1
示例 3:
输入: haystack = "", needle = ""
输出: 0
提示
0 <= haystack.length, needle.length <= 5 * 104haystack和needle仅由小写英文字符组成
思路分析
-
思路一: 这道题说白了就是个 匹配 问题,我们知道String中有一个 indexOf 的方法,可以直接返回某个指定的字符串值在字符串中首次出现的位置。这样我们第一种方法就有了。(代码见下)
-
思路二:
使用切割法 如果第一个字母相等 就切割出与 needle 长度相等的字符串 与needle相比较 相等则返回当前i值;若不相等,则继续循环。
要注意的是【int i = 0; i <= haystack.length()-needle.length(); i++】循环条件
代码实现
- 方法一:
简单粗暴,直接运用string的方法indexOf
return haystack.indexOf(needle);
- 方法二:
char[] arr1 = haystack.toCharArray();
char[] arr2 = needle.toCharArray();
for(int i = 0; i <= arr1.length - arr2.length; i++){
int j;
for(j = 0; j < arr2.length; j++){
if(arr1[i + j] != arr2[j]){
break;
}
}
if(j == arr2.length){
return i;
}
}
return -1;
最后
欢迎大佬提供新思路~