首页 > 编程语言 >kmp算法java

kmp算法java

时间:2024-05-22 10:21:02浏览次数:25  
标签:pmt java tar int pos ++ 算法 kmp now

KMP 是三位大牛:D.E.Knuth、J.H.Morris 和 V.R.Pratt 同时发现的。其中第一位就是《计算机程序设计艺术》的作者!!

KMP 算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为 P),如果它在一个主串(接下来称为 T)中出现,就返回它的具体位置,否则返回-1(常用手段)。

    public static void main(String[] args) {
        kmp("ababacabababca", "abababca");
    }

    private static int kmp(String s, String p) {
        int[] pmt = generatePmt(p);
        int tar = 0, pos = 0;
        while (pos < pmt.length) {
            if (s.charAt(tar) == p.charAt(pos)) {
                tar++;
                pos++;
            } else if (pos != 0)
                pos = pmt[pos - 1];
            else
                tar++;

            if (pos == p.length())
                return tar - pos;
        }
        return -1;
    }

    private static int[] generatePmt(String p) {
        int[] pmt = new int[p.length()];
        int x = 1;
        int now = 0;

        while (x < p.length()) {
            if (p.charAt(now) == p.charAt(x)) {
                now++;
                pmt[x] = now;
                x++;
            } else if (now != 0)
                now = pmt[now - 1];
            else {
                pmt[x] = 0;
                x++;
            }
        }
        return pmt;
    }

标签:pmt,java,tar,int,pos,++,算法,kmp,now
From: https://www.cnblogs.com/dkpp/p/18205622

相关文章

  • java 上传图片文件给前端
    /***查询对象*/@GetMapping("/getImage")@ApiOperationSupport(order=1)@ApiOperation(value="上传图片",notes="保存本地")publicRgetImg(StringjobId,HttpServletResponseresponse)throwsIOException{//region上传图片给前端Filefil......
  • java 获取前端上传的图片文件
    /***获取上传图片*/@PostMapping("/getImage")@ApiOperationSupport(order=1)@ApiOperation(value="获取图片",notes="保存本地")publicRStringuploadtaskpic(MultipartFilemultipartFile,StringjobId,HttpServletRequestrequest)throwsIO......
  • Java计算百分比保留整数
    1.Java计算百分比保留整数的方法步骤在Java中计算百分比并保留整数,通常涉及以下步骤:(1)计算原始数值与基准数值的百分比(通常使用(原始数值/基准数值)*100的公式)。(2)使用Math.round()方法对得到的百分比进行四舍五入到最接近的整数。以下是一个详细的代码示例,它展示了如何......
  • 基于yolov2深度学习网络模型的鱼眼镜头中人员检测算法matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022a  3.算法理论概述      基于YOLOv2深度学习网络模型的鱼眼镜头中人员检测算法结合了YOLOv2的高效目标检测能力和对鱼眼镜头畸变的校正处理,以实现对鱼眼图像中人员的准确识别。YOLOv2(YouOnlyLookO......
  • m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码率
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要      低密度奇偶校验码(Low-DensityParity-CheckCode,LDPC码)是一种高效的前向纠错码,广泛应用于无线通信、数据存储等领域。BP(BeliefPropagation)译码算法,又称为消息传递算法,是LDPC码最常用......
  • 代码随想录算法训练营第第14天 | 二叉树递归遍历(递归法、迭代、统一的迭代方法)
    递归遍历(必须掌握)二叉树的三种递归遍历掌握其规律后,其实很简单题目链接/文章讲解/视频讲解:https://programmercarl.com/二叉树的递归遍历.html迭代遍历(基础不好的录友,迭代法可以放过)题目链接/文章讲解/视频讲解:https://programmercarl.com/二叉树的迭代遍历.html统一迭代......
  • Java基本数据类型
    Java有八种基本数据类型:byte、short、int、long、float、double、string、bool。1.整数类型整数类型有三种表示形式:十进制、八进制、十六进制十进制:120、0、-127注意:除了数字0,不能以0作为其他十进制数的开头。八进制:0123、-0123八进制数必须以0开头。十六进制:0x25、0Xb......
  • Java框架集成ES
    1、SpringData Elasticsearch框架集成1.1、SpringData框架基本介绍SpringData是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。SpringData可以极大的简化JPA(El......
  • 强化学习Q-learning算法——Python实现
    Q-learning是一种基于值迭代的强化学习(ReinforcementLearning,RL)算法,主要用于在给定环境中学习一个策略,使得智能体(agent)能够在与环境交互的过程中获得最大累计奖励。它通过学习一个状态-动作值函数(Q函数)来指导智能体的行为选择,适用于各种离散状态和动作的任务环境。Q-learning在......
  • 【APIM】Azure APIM抛出 java.lang.RuntimeException 错误定位
    问题描述AzureAPIM服务日志中发现java.lang.RuntimeException错误,在进一步通过ApplicationInsights采集的错误信息日志,发现真实的请求错误为:‘Theremotenamecouldnotberesolved'xxxx.xxx.xx'"。 问题解答APIM服务,在没有配置自定义的DNS服务器时,默认会使用Azure平......