题目
实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
思路
朴素模式匹配算法
将主串中所有长度为m的子串一次与模式串对比,直到找到一个完全匹配的子串,或所有的子串都不匹配为止。
- 若当前子串匹配失败,则主串指针i指向下一个指针的第一个位置,模式串指针j回到模式串的第一个位置。
- 若 j >= 模式串的长度,则当前子串匹配成功,返回当前子串第一个字符的位置 i - 模式串长度
class Solution {
public int strStr(String haystack, String needle) {
if(needle.length() == 0) return 0;
int i = 0, j = 0; //i指针用于遍历haystack,j指针用于遍历needle
while(i < haystack.length() && j < needle.length()) {
if(haystack.charAt(i) == needle.charAt(j)) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
}
if(j >= needle.length()) {
return i - needle.length();
} else {
return -1;
}
}
}