题目描述:
实现 [strStr()] 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例:
示例 1:
输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:
输入: haystack = "aaaaa", needle = "bba"
输出: -1
说明:
当 needle
是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
于本题而言,当 needle
是空字符串时我们应当返回 0 。这与C语言的 [strstr()]以及 Java的 [indexOf()]定义相符。
解答:
解答 1:
public int strStr(String haystack, String needle) {
return haystack.indexOf(needle);
}
解答 2:
public static int strStr(String haystack, String needle) {
// 子串长度为0,返回0
if (needle.length() == 0) {
return 0;
}
// 子串或者母串为空,返回-1
if (haystack == null || needle == null) {
return -1;
}
int j = needle.length();
// 循环母串,到子串长度前停止
for (int h = 0; h < haystack.length() - needle.length() + 1; h++) {
// 使用substring判断是否有子串;注意左闭右开,右侧需要+1
// j每次都会自增,不满足就会i自增;h+j和j++等同效果【j保持不变;h++相当于j++】。
if (haystack.substring(h, h+j).equals(needle)) {
System.out.println(h);
// 找到第一个位置就可以return
return h;
}
}
/*
int i=0;
while(i<haystack.length()-j+1){
if (haystack.substring(i, i+j).equals(needle)) {
System.out.println(i);
return i;
}else{
i++;
}
}*/
// 没有找到,return:-1
return -1;
}
注意:
1.灵活使用subString,注意右开
2.可扩展很多,详见28.1 。
网友评论