栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

字符串-----7.KMP算法获取子串下标

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

字符串-----7.KMP算法获取子串下标

第11日:实现 strStr()获取子串下标位置

题目链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnr003/

题目:

实现strStr()函数。

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在则返回-1。

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。

示例 1:

输入:haystack = “hello”, needle = “ll”

输出:2

示例 2:

输入:haystack = “aaaaa”, needle = “bba”
输出:-1

示例 3:

输入:haystack = “”, needle = “”
输出:0

提示:

0 <= haystack.length, needle.length <= 5 * 104
haystack 和 needle 仅由小写英文字符组成

相关标签 双指针、字符串、字符串匹配

解题:
  • KMP算法

    大致思路:

    1. 根据所给子串求出next数组
    2. 设置双指针i、j,遍历父串,如果两字符相同指针同时后移动,如果不相同同则回退到对应next数组下标所指位置,若对应next值为-1,则j不动i++。

    详细代码如下:

        
        public int strStr(String haystack, String needle) {
            if (needle.length() == 0)
                return 0;
            char[] parent = haystack.toCharArray();int i=0;
            char[] child = needle.toCharArray();int j=0;
            int[] next = getNext(needle);
            while (i 

  • 求next数组比较晦涩难懂,如果没有基础,可以推荐去看KMP算法之求next数组代码讲解,我也看过其他视频,但这个让我突然秒懂。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288589.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号