686. 重复叠加字符串匹配

news2024/10/7 12:23:53

686. 重复叠加字符串匹配

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • __686重复叠加字符串匹配__暴力解法__直接调用函数
    • __686重复叠加字符串匹配__KMP算法

原题链接:

686. 重复叠加字符串匹配

https://leetcode.cn/problems/repeated-string-match/description/

完成情况:

在这里插入图片描述

解题思路:

    寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1。

    字符串 "abc" 重复叠加 0 次是 "",重复叠加 1 次是 "abc",重复叠加 2 次是 "abcabc"。

     1 <= a.length <= 10^4
     1 <= b.length <= 10^4
     
     
    /**
     解题思路:
        先找到那个长,那个短
        然后我们再进行测试,去进行匹配

        “”space代表0格。
        一份代表1格
        二份代表2格
        没有匹配的话,就对应-1

     题目的意思是a字符串重复多少次,可以实现包含有字符串b
     寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串

     卧槽,看到题解之后,发现这他妈不就是传说中的KMP算法
     */

参考代码:

__686重复叠加字符串匹配__暴力解法__直接调用函数

package LeetCode中等题;

public class __686重复叠加字符串匹配__暴力解法__直接调用函数 {
    public static void main(String[] args) {
        System.out.println(  repeatedStringMatch("abcabc","abc"));
    }
    public static int repeatedStringMatch(String a, String b) {
        /*
        寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1。

        字符串 "abc" 重复叠加 0 次是 "",重复叠加 1 次是 "abc",重复叠加 2 次是 "abcabc"。

         1 <= a.length <= 10^4
         1 <= b.length <= 10^4
         */
        /**
         解题思路:
            先找到那个长,那个短
            然后我们再进行测试,去进行匹配

            “”space代表0格。
            一份代表1格
            二份代表2格
            没有匹配的话,就对应-1

         题目的意思是a字符串重复多少次,可以实现包含有字符串b
         寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串

         卧槽,看到题解之后,发现这他妈不就是传说中的KMP算法
         */
        int res = 0;
        StringBuilder stringBuilder = new StringBuilder();
        int maxLength = 2*a.length()+b.length();    //这样就可以形成一个aba形式的字符串,
        // 我们也就不必去考虑是a长,还是b长。
        /**
         * 输入:a = "abc", b = "wxyz"
         * 输出:-1
         */
        while (stringBuilder.length()  <  maxLength){  //只要还没达到长度,就说明还需要进行探测
            stringBuilder.append(a);
            res++;
            if (stringBuilder.toString().indexOf(b) != -1){         //找到了返回索引位置,没找到返回-1
                return res;
            }
        }
        return -1;
    }
}

__686重复叠加字符串匹配__KMP算法

package LeetCode中等题;

public class __686重复叠加字符串匹配__KMP算法 {
    public int repeatedStringMatch(String a, String b) {
        int aLength = a.length(),bLength = b.length();
        int index = strStr(a,b);
        if (index == -1){
            return -1;
        }
        if (aLength - index >= bLength){
            return 1;
        }
        return (bLength + index - aLength -1)/aLength +2;
    }

    /**
     *
     * @param hayStack
     * @param needle
     * @return
     */
    private int strStr(String hayStack, String needle) {
        int hayStackLength=hayStack.length(),needleLength = needle.length();
        if (needleLength == 0){
            return 0;
        }
        int [] pi =new int[needleLength];
        for (int i=1,j=0;i<needleLength;i++){
            while (j>0 && needle.charAt(i) != needle.charAt(j)){
                j = pi[j - 1];
            }
            if (needle.charAt(i) ==  needle.charAt(j)){
                j++;
            }
            pi[i] = j;
        }
        for (int i=0,j=0;i-j < hayStackLength;i++){  // b 开始匹配的位置是否超过第一个叠加的 a
            while (j>0 && hayStack.charAt(i % hayStackLength) != needle.charAt(j)){
                j = pi[j-1];
            }
            if (hayStack.charAt(i % hayStackLength) == needle.charAt(j)){
                j++;
            }
            if (j== needleLength){
                return i-needleLength+1;
            }
        }
        return -1;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/916105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 简单实验 自定义组件 综合应用 传参数 循环

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"todo-list-app"><ol><!--现在我们为每个 todo-item 提供 todo 对象todo 对象是变量&#xff0c;即其内容可以是动态的。…

Python Pandas 提取csv数据再合并

文章目录 需求思路&#xff1a;步骤伪代码 需求 从不同的csv文件中提取相同的列&#xff0c;然后合并成一个csv 假设有这样一张csv&#xff0c; column A&#xff0c; B&#xff0c; C, D 的数据分别来自a.csv, b.csv, c.csv, d.csv指定的某一列数据。 Title 列的Items是之前…

【自动驾驶】TI SK-TDA4VM 开发板上电调试,AI Demo运行

1. 设备清单 TDA4VM Edge AI 入门套件【略】USB 摄像头(任何符合 V4L2 标准的 1MP/2MP 摄像头,例如:罗技 C270/C920/C922)全高清 eDP/HDMI 显示屏最低 16GB 高性能 SD 卡连接到互联网的 100Base-T 以太网电缆【略】UART电缆外部电源或电源附件要求: 标称输出电压:5-20VDC…

无线路由器实现网络接入

目录 简介 1. 常见的接人互联网方式及设备 2.常见的接入互联网方式比较 2.2接入互联网设备 简介 随着IT技术的不断发展&#xff0c;一些中小型企业和家庭用户对网络带宽的需求越来越高。而传统的接入互联网方式虽然价格便宜&#xff0c;但是其稳定性受线路等其他因素影响。因…

轻松搭建远程Node.js服务端,让你的应用在公共网络中畅行无阻!

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

「2024」预备研究生mem-带绝对值的一次与二次不等式方程和不等式图像

一、带绝对值的一次与二次不等式&方程和不等式图像 代入特殊值 带绝对值的方程不等式&#xff1a; 二、课后题

solidity0.8.0的应用案例9:代理合约

代码由OpenZeppelin的Proxy合约简化而来。 代理模式 Solidity合约部署在链上之后,代码是不可变的(immutable)。这样既有优点,也有缺点: 优点:安全,用户知道会发生什么(大部分时候)。坏处:就算合约中存在bug,也不能修改或升级,只能部署新合约。但是新合约的地址与…

Mesa 23.2 开源图形栈现已可供下载

导读作为 Mesa 23 系列的第二个重要版本&#xff0c;Mesa 23.2 开源图形栈现已可供下载&#xff0c;它为 AMD GPU 的 RADV Vulkan 驱动程序带来了新功能&#xff0c;改进了 Linux 游戏&#xff0c;并新增了 Asahi 功能。 Mesa 23.2 的亮点包括 Asahi 上的 OpenGL 3.1 和 OpenGL…

GC面临的困境,JVM是如何解决跨代引用的?

本文已收录至GitHub&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 跨代引用问题记忆集卡表写屏障写屏障的伪共享问题 前面我们讲了可达性分析和根节点枚举&#xff0c…

你真的了解四种内部类吗

作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 内部类 实例内部类注意事项 静态内部类注意事项 局…

联发科雄起,生成式AI将可在手机本地运行,天玑9300“大放异彩”

据报道&#xff0c;高通和联发科都计划在即将推出的旗舰手机上集成设备端生成式人工智能功能。这意味着用户将能够在手机上使用先进的语言模型技术。 高通选择与Meta合作&#xff0c;将其最新的语言模型Llama 2&#xff08;LLM&#xff09;引入他们的设备&#xff0c;而联发科则…

TCP最大连接数问题总结

最大TCP连接数量限制有&#xff1a;可用端口号数量、文件描述符数量、线程、内存、CPU等。每个TCP连接都需要以下资源&#xff0c;如图所示&#xff1a; 1、可用端口号限制 Q&#xff1a;一台主机可以有多少端口号&#xff1f;端口号与TCP连接&#xff1f;是否能修改&#x…

编程锦囊妙计——快速创建本地Mock服务

点击上方&#x1f446;蓝色“Agilean”&#xff0c;发现更多精彩。 前情提要 在本系列上一篇文章《全文干货&#xff1a;打破前后端数据传递鸿沟&#xff0c;高效联调秘笈》中我们分享了使用Zod这一运行时类型校验库来对后端服务响应结果进行验证达到增加项目质量的方式。 这次…

TypeError: div() got an unexpected keyword argument ‘rounding_mode’

报错代码&#xff1a;torch.div(…, …, rounding_mode“floor”) mask_idx torch.div(idx, self.instance_classes, rounding_mode“floor”) 报错原因&#xff1a; rounding_mode在torch1.8才引入 https://github.com/mit-han-lab/torchsparse/pull/126 torch.div()方法的…

生信豆芽菜-信号转导通路相关评分的计算

网址&#xff1a;http://www.sxdyc.com/gradeSigna 1、数据准备 表达谱数据&#xff0c;行为基因&#xff0c;列为样本 2、提交后&#xff0c;等待运行成功即可下载 当然&#xff0c;如果不清楚数据是什么样的&#xff0c;可以选择下载我们的示例数据&#xff0c;也可以关…

跨境出海:如何轻松应对多账号管理

在如今的跨境电商时代&#xff0c;成功经营一个线上店铺不再仅仅需要商品和服务&#xff0c;还需要精通广告投放、营销策略等多个领域。 然而&#xff0c;老练的电商从业者知道&#xff0c;如果不重视平台账号的管理方法&#xff0c;可能会导致店铺或营销账号被关联&#xff0…

NO.06 自定义映射resultMap

1、前言 在之前的博客中&#xff0c;实体类的属性名和数据库表的字段名是一致的&#xff0c;因此能正确地查询出所需要的数据。当实体类的属性名与数据库表的字段名不一致时&#xff0c;会导致查询出来的数据为空指针。要解决这个问题就需要使用resultMap自定义映射。 使用的…

前端常用插件推荐

1.MD格式文件 我们经常会遇到md格式文件的编辑和预览&#xff0c;推荐两个插件&#xff1a; uiw/react-markdown-editor&#xff0c;uiw/react-markdown-preview&#xff0c;不通语言应该有对应的版本&#xff0c;这里是react为例子&#xff0c;也是用过其他的组件&#xff0…

一键实现 Oracle 数据整库同步至 Apache Doris

在实时数据仓库建设或迁移的过程中&#xff0c;用户必须考虑如何高效便捷将关系数据库数据同步到实时数仓中来&#xff0c;Apache Doris 用户也面临这样的挑战。而对于从 Oracle 到 Doris 的数据同步&#xff0c;通常会用到以下两种常见的同步方式&#xff1a; OGG/XStream/Lo…

JAVA基础-02实例变量和类变量区别

0x00 类变量 类变量&#xff08;Class Variables&#xff09;&#xff0c;也称为静态变量&#xff08;Static Variables&#xff09;&#xff0c;是在类级别声明的变量&#xff0c;与类的所有实例共享相同的值。与实例变量不同&#xff0c;类变量不属于对象的特定实例&#xf…