Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
【初级算法|字符串】13-查找子串出现的位置
题目
实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
输入:haystack = "hello", needle = "ll"
输出:2
思路分析
题目是需要找出子串的位置。如果直接使用 IndexOf 那么一行代码即可解决。
这道题使用算法的思路解决的话也是很简单的。直接一个个字符进行匹配。子串从头开始和主串进行匹配,如果匹配失败了,子串再次从头开始匹配,主字符串就下一个字符继续匹配。直到子串都遍历结束都没有中断主串的遍历,那么说明存在,就可以当前的位置减去子串的位置,就是子串的位置
AC 代码
function func_exerise10(haystack, needle) {
if (needle.length == 0) return 0
let i = 0;
let j = 0;
while (i < haystack.length && j < needle.length) {
if (haystack[i] == needle[j]) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
if (j == needle.length)
return i - j;
}
return -1;
}