• LeetCode——实现 strStr()


    Q:Implement strStr().
    Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

    A:KMP算法
    kmp算法的思想就是:在匹配过程中,若发生不匹配的情况,如果next[j]>=0,则目标串的指针i不变,将模式串的指针j移动到next[j]的位置继续进行匹配;若next[j]=-1,则将i右移1位,并将j置0,继续进行比较。

        public static int strStr(String haystack, String needle) {
            if (needle == null || needle.length() == 0)
                return 0;
            int[] next = getNext(needle);
            int nIndex = 0;
            int hIndex = 0;
            while (nIndex != needle.length() && hIndex != haystack.length()) {
                //相等两个都往后放1
                if (haystack.charAt(hIndex) == needle.charAt(nIndex)) {
                    hIndex++;
                    nIndex++;
                } else if (next[nIndex] == -1) {
                    //第一个都没有相等的时候
                    hIndex++;
                } else {
                    //找到当前位置next数组中的index
                    nIndex = next[nIndex];
                }
            }
            if (nIndex == needle.length())
                return hIndex - nIndex;
            else
                return -1;
        }
    
        public static int[] getNext(String needle) {
            if (needle.length() == 1)
                return new int[]{-1};
            int[] next = new int[needle.length()];
            //next数组从-1开始
            next[0] = -1;
            next[1] = 0;
            for (int i = 2; i < needle.length(); i++) {
                for (int count = 1; count < i - 1; count++) {
                    String s1 = needle.substring(0, count + 1);
                    String s2 = needle.substring(i - count, i);
                    if (!s1.equals(s2)) {
                        next[i] = count;
                        continue;
                    }
                }
            }
            return next;
        }
    
  • 相关阅读:
    c++经典书籍介绍
    jpeg软解码实现介绍
    视频编解码类型调查——抖音客户端
    微机接口复习
    更改MySQL数据库的密码
    python学习之创建我的第一个Django项目
    关于 V831 linux 调用 gpio 的一些通用操作。
    SpringBoot整合H2内存数据库快速启动测试
    MybatisPlus的各种功能使用笔记综合!
    MybatisPlus的自动填充功能使用!
  • 原文地址:https://www.cnblogs.com/xym4869/p/12552998.html
Copyright © 2020-2023  润新知