【初级算法|字符串】13-查找子串出现的位置

166 阅读1分钟

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;
}

总结

题目来源:leetcode-cn.com/leetbook/re…