java数据结构与算法刷题-----LeetCode459. 重复的子字符串

news2024/11/26 22:24:17
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

在这里插入图片描述

本题的高效解法,需要使用KMP算法中,NEXT数组的处理逻辑

KMP算法https://blog.csdn.net/grd_java/article/details/136107363
解题思路
  1. abcabcabcabc为例对应NEXT数组为[0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  2. 可见最长公共前后缀为abcabcabc.我们发现,如果是通过固定子串重复若干次组成的字符串,减去最长公共前后缀后,剩下的就是这个重复若干次的固定子串
  3. 所以我们可以利用KMP算法中的NEXT数组,获取整个字符串的最长公共前后缀长度。
  4. 对于这个例子就可以得到最长公共前后缀长度为9. 而整个字符串长度len = 12. 12-9 = 3. 3就是固定重复子串abc的长度。
  5. 如果整个字符串都可以被abc这个固定重复子串整除,那么就说明这个字符串一定是满足题意的。
  6. 也就是len % (len - next[len-1]) == 0的话,就满足题意。简单来说就是len - next[len-1]是固定重复子串abc的长度。len是整个字符串的长度。如果len可以被abc这个固定重复子串整除,那么就满足题意。
代码

在这里插入图片描述

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        if (s.equals("")) return false;
        int len = s.length();//字符串长度
        char[] chars = s.toCharArray();//转换为字符数组
        int[] next = new int[len];//创建KMP算法的NEXT数组,下标从1开始
        //KMP--NEXT数组三步走
        for (int i = 1, j = 0; i < len; i++) {//直接从第二个元素比
            while (j > 0 && chars[i] != chars[j]) j = next[j-1];//如果不匹配,获取应该回退的位置
            if (chars[i] == chars[j]) j++;//如果匹配,则公共缀长度+1
            next[i] = j;//记录当前缀的公共前后缀长度
        }
        //此时next[len-1]保存的是整个字符串的最长公共前后缀长度。
        //如果此时next[len-1]这个前后缀公共长度,将其从字符串中剔除,正好剩下重复子串
        //那就说明整个字符串都是用重复子串构成的。整个字符串的长度,也就可以通过这个重复子串整除
        if (next[len-1] > 0 && len % (len - next[len-1]) == 0) return true;//如果可以被重复子串长度整除就返回true
        else return false;//否则返回false
    }
}

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

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

相关文章

【机器学习案例3】从科学论文图片中提取标题、作者和摘要【含源码】

在这个项目中,我的目标是从科学论文图片中提取某些部分(标题、作者和摘要)。预期提取部分是科学论文中常见的部分,例如标题、摘要和作者。输入与最终结果。我的输入是将第一页纸转换成图像。最终结果是一个 txt 文件,其中包含标题、作者和摘要部分,如下图1和图2所示。我将…

【HTML】交友软件上照片的遮罩是如何做的

笑谈 我不知道大家有没有在夜深人静的时候感受到孤苦难耐&#xff0c;&#x1f436;。于是就去下了一些交友软件来排遣寂寞。可惜的是&#xff0c;有些交友软件真不够意思&#xff0c;连一些漂亮小姐姐的图片都要进行遮罩&#xff0c;完全不考虑兄弟们的感受,&#x1f620;。所…

steam游戏搬砖项目靠谱吗?有没有风险?

作为一款fps射击游戏&#xff0c;csgo在近几年可谓是火出圈&#xff0c;作为一款全球竞技游戏&#xff0c;深受玩家喜爱追捧&#xff0c;玩家追求的就是公平公正&#xff0c;各凭本事&#xff0c;像其他游戏可能还会有皮肤等装备属性加成&#xff0c;在csgo里面是不存在的。 纯…

AI短视频一键换脸小程序源码/带流量主

微信云开发AI一键视频换脸小程序源码是由极客二改后发布的&#xff0c;小程序增加了广告控制&#xff0c;插屏广告&#xff0c;激励广告和原生广告&#xff0c;由于采用了微信云开发没有后台&#xff0c;所以不需要域名和服务器也可以正常搭建使用&#xff0c;所有的配置都可以…

PR:序列的设置

新建序列 序列设置 将视频拖到时间轴上&#xff0c;如果视频的分辨率或帧率和序列设置不一致会有如下提示&#xff0c;保持现有设置即可

卡内基梅隆大学推出模块化爬行机器人,革新天然气管道维护技术!

天然气&#xff0c;作为典型清洁能源代表&#xff0c;在减缓环境污染和应对气候变暖中扮演着关键角色。在众多国家&#xff0c;它已跻身主要能源行列&#xff0c;在工业生产、供暖、电力生成等领埴发挥着核心作用。 天然气管道作为关键的能源传输纽带&#xff0c;为全球数以亿…

【JavaScript】面试手写题精讲之数组(上)

专题缘由 该专题主要是讲解我们在面试的时候碰到一些JS的手写题, 确实这种手写题还是比较恶心的。有些时候好不容易把题目写出来了&#xff0c;突然面试官冷不丁来一句有没有更优的解法&#xff0c;直接让我们僵在原地。为了解决兄弟们的这些困扰&#xff0c;这个专题于是就诞…

MySQL数据库⑩_视图+MySQL用户管理(增删查改)

目录 1. 视图的概念和规则限制 2. 视图的基本使用 2.1 创建视图 2.2 修改视图影响基表 2.3 修改基表影响视图 2.4 删除视图 3. MySQL用户管理 3.1 用户信息 3.2 创建用户 3.3 修改用户密码 3.4 删除用户 4. 用户权限 4.1 MySQL权限 4.2 给用户授权 4.3 回收权限…

imazing怎么连接苹果手机

imazing怎么连接苹果手机 要连接苹果手机&#xff0c;您可以选择使用数据线或无线网络&#xff08;Wi-Fi&#xff09;两种方式。以下是具体的步骤&#xff1a; 使用数据线连接&#xff1a; 准备工具&#xff1a;确保您的Mac或Windows电脑已经安装了iMazing软件&#xff0c;并且…

谷歌浏览器安装扩展程序axure-chrome-extension

注&#xff1a; 文末附扩展附件&#xff1a;axure-chrome-extension_v0.7.0.crx 1、安装扩展程序axure-chrome-extension 找到axure-chrome-extension.crx&#xff0c;把axure-chrome-extension.crx后缀改为zip&#xff0c;然后解压&#xff0c;得到一个文件夹 2、打开谷歌浏览…

OJ_奇怪的餐厅

题干 鲁大师和他的朋友经常去一家奇怪的餐厅&#xff0c;为什么说奇怪呢&#xff0c;一是餐厅提供的菜品比较奇怪&#xff0c;二是餐厅的付费规则比较奇怪&#xff0c;每个人有不同的折扣上限&#xff08;单人从总结里折算的最高金额&#xff09;&#xff0c;超过折扣上限的部…

蓝桥杯嵌入式第12届真题(完成) STM32G431

蓝桥杯嵌入式第12届真题(完成) STM32G431 题目 程序 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body**************************…

RK3568平台开发系列讲解(实验篇)杂项设备驱动实验

🚀返回专栏总目录 文章目录 一、什么是杂项设备驱动二、杂项设备的注册和卸载三、杂项设备驱动实验代码沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是杂项设备驱动 在 Linux 中,把无法归类的五花八门的设备定义成杂项设备。相较于字符设备,杂项设备有以下两…

网络原理(3)--以太网协议,DNS

&#x1f495;"Echo"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;网络原理(3)–以太网协议,DNS 在网络原理(2)中介绍了网络层中的一个重要的协议–ip协议,网络层关注的通信时的起点和终点,而数据链路层更加"底层"一些,关注的是传输过程…

【数据结构】图

文章目录 图1.图的两种存储结构2.图的两种遍历方式3.最小生成树的两种算法&#xff08;无向连通图一定有最小生成树&#xff09;4.单源最短路径的两种算法5.多源最短路径 图 1.图的两种存储结构 1. 图这种数据结构相信大家都不陌生&#xff0c;实际上图就是另一种多叉树&…

Vue项目-创建

Vue项目-创建 创建一个工程化的Vue项目&#xff0c;执行命令&#xff1a;npm init vuelatest 第一次执行npm init vuelatest命令&#xff0c;会出现以下提示&#xff0c;输入y即可安装create-vue最新版本。 随后create-vue脚手架会给出项目的众多选项 根据提示输入命令 cd…

全面理解JVM虚拟机

为什么要学JVM&#xff1f; ​ 首先&#xff1a;面试需要。面试题层出不穷&#xff0c;难道每次面试都靠背几百上千条面试八股&#xff1f; ​ 其次&#xff1a;基础决定上层建筑。自己写的代码都不知道是怎么回事&#xff0c;怎么可能写出靠谱的系统&#xff1f; ​ 然后&a…

Github 2024-02-15 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-15统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量TypeScript项目4Python项目2Solidity项目2Rust项目1JavaScript项目1Go项目1C项目1 Terraform: 以安全和可预测…

UniApp学习之旅:从入门到快速上手

随着移动互联网的迅猛发展&#xff0c;跨平台应用开发成为了开发者们的热门选择。UniApp&#xff0c;作为一款使用Vue.js开发所有前端应用的框架&#xff0c;因其简单、高效、易上手的特性&#xff0c;受到了广大开发者的青睐。本文将带你走进UniApp的世界&#xff0c;从基础学…

2024年,要特别注意这两个方位

家居风水对每个家庭都非常重要&#xff0c;可在无形中影响到人们的事业、财富以及健康运势。俗话说&#xff1a;“风水轮流转”&#xff0c;2024年为甲辰龙年&#xff0c;斗转星移、九宫飞星将改变宫位&#xff0c;新一年的磁场即将启动&#xff0c;方位的吉凶也会重新变动&…