一、题目描述
实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
二、解题思路
java中有截取字符串的方法:
public String substring(int beginIndex, int endIndex)
: 这个方法截取的字符串从beginIndex开始,到字符串索引的endIndex - 1结束,即截取的字符串不包括endIndex这个索引对应的字符,所以endIndex的最大值为整个字符串的长度。
本题中通过不停的截取主串haystack的值,每次截取的长度是needle的长度,截取的值和needle进行比较。
三、代码演示
class Solution {
public int strStr(String haystack, String needle) {
//获取两个字符串的长度
int L = needle.length();
int H = haystack.length();
//haystack的长度-needle的长度+1作为start结束的位置,正好是needle的位置
for (int start=0; start<H-L+1; start++){
if (haystack.substring(start,start+L).equals(needle)){
return start;
}
}
return -1;
}
}
代码详细解析:
第一步:获取haystack和needle字符的长度,指针start从0开始,结束位置是H-L+1=4(可以仔细想想为什么)
第二步:开始遍历: