当前位置: 首页 > news >正文

30-算法打卡-字符串-重复的子字符串-leetcode(459)-第三十天

1 题目地址

459. 重复的子字符串 - 力扣(LeetCode)459. 重复的子字符串 - 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1:输入: s = "abab"输出: true解释: 可由子串 "ab" 重复两次构成。示例 2:输入: s = "aba"输出: false示例 3:输入: s = "abcabcabcabc"输出: true解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。) 提示: * 1 <= s.length <= 104 * s 由小写英文字母组成https://leetcode.cn/problems/repeated-substring-pattern/


2 题目说明

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

示例 1:

输入: s = "abab"
输出: true
解释: 可由子串 "ab" 重复两次构成。

示例 2:

输入: s = "aba"
输出: false

示例 3:

输入: s = "abcabcabcabc"
输出: true
解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)

提示:

  • 1 <= s.length <= 104
  • s 由小写英文字母组成

3 解题思路

3.1 移动匹配

        当一个字符串(s)是重复的子字符串,那么s+s在去除第1个和末尾字符,依然满足包含s,则表示字符串是重复的子字符串,否则就不是重复的子字符串。

 推演过程:去除s+s的头尾如果是如下情景相等,则可以推演除字符串是有s[0]s[1]s[2]组成

推演过程:去除s+s的头尾如果是如下情景相等,则可以推演除字符串是有s[0]s[1]组成 

3.2 KMP(待补充)

判断字符串中是否出现另外一个字符串,对于这种问题可以使用KMP算法。
KMP算法是一种改进的字符串匹配算法,核心是利用匹配失败后的信息,尽量减少模式串与文本串的匹配次数,当匹配失败的时候回退到上次匹配成功的位置。

KMP算法的可以查看以下讲解:

28-算法打卡-字符串-KMP算法理论-第二十八天-CSDN博客

29-算法打卡-字符串-KMP算法理论2-第二十九天-CSDN博客

如果一个字符串s是由重复子串组成,那么最长相等前后缀不包含的子串一定是字符串s的最小重复子串。 
1  最长相等前后缀不包含的子串的长度比字符串s的一半的长度还大,那一定不是字符串s的重复子串。
2 最长相等前后缀不包含的子串的长度可以被字符串s的长度整除,那么子串一定是最小重复子串
3 最长相等前后缀不包含的子串的长度不被字符串s的长度整除,那么最长相等前后缀不包含的子串一定不是字符串s的最小重复子串。

next[len-1]=9,9就是字符串abcabcabcabc的最长相同前后缀的长度。
len(字符串长度)-next[len-1](最长公共前后缀长度)=12-9=3(最长相同前后缀不包含的子串的长度)
3可以被12(字符串的长度)整除,并且3小于12的一半,所以说明有重复的子字符串(abc)


4 代码编写


4.1 移动匹配

class Solution {public boolean repeatedSubstringPattern(String s) {// 字符串s+sString ss = s + s;// 字符串s+s去除头尾字符String removeS = ss.substring(1, ss.length()-1);// 如果包含字符串s,则表示是子字符串,否则不是子字符串return removeS.contains(s);}}


4.2 KMP

最长公共前后缀不包括的字符为最小重复子串
并且最小重复子串可以被字符的长度整除
满足两种条件即为重复的子字符串

class Solution {public boolean repeatedSubstringPattern(String s) {int len = s.length();int[] next = new int[len];getNext(s, next);// 重复子字符串长度 = 字符长度 - 最长公共前后缀字符串长度int sub = len -  next[len-1];// 重复子字符串长度可以被字符长度整除,即为重复的子字符串if (next[len-1]>0 && len % sub == 0) {return true;} else {return false;}}// 前缀表public void getNext(String s, int[] next) {int j = 0;next[0] = j;for (int i=1; i<s.length(); i++) {while(j>0 && s.charAt(i)!=s.charAt(j)) {j = next[j-1];}if(s.charAt(i)==s.charAt(j)) {j++;}next[i]=j;}}}

相关文章:

30-算法打卡-字符串-重复的子字符串-leetcode(459)-第三十天

1 题目地址 459. 重复的子字符串 - 力扣&#xff08;LeetCode&#xff09;459. 重复的子字符串 - 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1:输入: s "abab"输出: true解释: 可由子串 "ab" 重复两次构成…...

rocketmq一些异常记录

rocketmq一些异常记录 Product 设置不重复发送 发送 一次失败&#xff0c;不会在被发送到mq消息队列中&#xff0c;相当于消息丢失。 2、 Consumer 消费失败 重试三次消费 都失败 则消息消费失败&#xff0c;失败后 会放入 死信队列&#xff0c;可以手动处理在mq面板 处理死信队…...

SQLMesh 测试自动化:提升数据工程效率

在现代数据工程中&#xff0c;确保数据模型的准确性和可靠性至关重要。SQLMesh 提供了一套强大的测试工具&#xff0c;用于验证数据模型的输出是否符合预期。本文将深入探讨 SQLMesh 的测试功能&#xff0c;包括如何创建测试、支持的数据格式以及如何运行和调试测试。 SQLMesh …...

WPF使用SQLite与JSON文本文件结合存储体侧平衡数据的设计与实现

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

关系型数据库PostgreSQL vs MySQL 深度对比:专业术语+白话解析+实战案例

PostgreSQL 与 MySQL 的详细对比 PostgreSQL 和 MySQL 是两种最流行的开源关系型数据库&#xff0c;它们在设计理念、功能特性和适用场景上有显著差异。以下是它们的详细对比&#xff1a; 一、基本架构与设计理念 PostgreSQL&#xff1a;多进程架构&#xff0c;使用共享内存通…...

利用 SSRF 和 Redis 渗透

环境搭建 在本次实验中&#xff0c;我们使用 Docker 环境进行测试。 解压实验包&#xff0c;搭建 docker 环境。 docker环境 web的dockerfile 主要利用代码 &#xff1a; redis服务器 通过 docker-compose up -d 启动相关容器&#xff0c;初次启动失败。 发现 docker 版本问…...

脏读、幻读、可重复读

脏读 定义&#xff1a;一个事务读取了另一个事务尚未提交的数据 。比如事务 A 修改了某条数据但还没提交&#xff0c;此时事务 B 读取了这条被修改但未提交的数据。若事务 A 后续回滚&#xff0c;事务 B 读到的数据就是无效的&#xff0c;相当于读到了 “脏数据”。危害&#…...

第1讲、#PyTorch教学环境搭建与Tensor基础操作详解

引言 PyTorch是当前深度学习领域最流行的框架之一&#xff0c;因其动态计算图和直观的API而备受开发者青睐。本文将从零开始介绍PyTorch的环境搭建与基础操作&#xff0c;适合各种平台的用户和深度学习初学者。 1. 安装和环境搭建 macOS (Apple Silicon) 对于Mac M1/M2/M3用…...

【创新实训个人博客】数据库搭建

1.原因 为了降低模型使用以前训练的数据或者幻觉知识&#xff0c;我们在对话时需要提供相关内容的数据&#xff0c;同时由于需要最新的广告实时数据&#xff0c;实时爬取和版权问题。数据由团队在网上爬取&#xff0c;为了广告内容的有效性&#xff0c;如果长期使用&#xff0…...

《代码整洁之道》第6章 对象和数据结构 - 笔记

数据抽象 (Data Abstraction) 这个小节主要讲的是**面向对象编程&#xff08;OOP&#xff09;**的一种核心思想&#xff1a;对象应该隐藏它的内部数据&#xff0c;只暴露可以操作这些数据的“行为”&#xff08;也就是方法/函数&#xff09;。 大白话&#xff1a; 你创建一个…...

Python判断字符串中是否包含特殊字符

在 Python 中&#xff0c;判断一个字符串是否包含特殊字符可以通过多种方法实现。常见的特殊字符包括空格、感叹号、单引号、括号、星号、加号、逗号、斜杠、冒号、分号、等号、问号、 符号、方括号、花括号和 & 符号等。 为了判断字符串中是否包含这些特殊字符&#xff0…...

disruptor-spring-boot-start版本优化升级

文章目录 1.前言2.升级内容3.依赖4.总结 1.前言 由于之前写了一篇《disruptor-spring-boot-start生产实践导致pod节点CPU爆表100%的问题解决说明》的文章&#xff0c;里面说本地启动没有啥问题&#xff0c;后面我启动之前写的那个测试的controller发现&#xff0c;本地电脑的CP…...

复杂背景下无人机影像小目标检测:MPE-YOLO抗遮挡与抗背景干扰设计

目录 一、引言 二、挑战和贡献 密集小目标和遮挡 实时性要求与精度权衡 复杂背景 三、MPE-YOLO模型细节 多级特征集成器&#xff08;MFI&#xff09; 感知增强卷积&#xff08;PEC&#xff09; 增强范围C2f模块&#xff08;ES-C2f&#xff09; 四、Coovally AI模型训…...

项目实战 -- 状态管理

redux基础 还记得好久好久之前就想要实现的一个功能吗&#xff1f; 收起侧边栏折叠菜单&#xff0c;没错&#xff0c;现在才实现 因为不是父子通信&#xff0c;所以处理起来相对麻烦一点 可以使用状态树或者中间人模式 这就需要会redux了 Redux工作流&#xff1a; 异步就…...

基于单片机的智能药盒系统

标题:基于单片机的智能药盒系统 内容:1.摘要 本文聚焦于基于单片机的智能药盒系统。背景方面&#xff0c;随着人口老龄化加剧&#xff0c;老年人按时准确服药问题愈发凸显&#xff0c;同时现代快节奏生活也使人们容易遗忘服药时间。目的是设计并实现一个能帮助人们按时、按量服…...

【PyCharm- Python- ArcGIS】:安装一个和 ArcGIS 不冲突的独立 Python让PyCharm 使用 (解决全过程记录)

之前电脑上安装了anaconda3&#xff0c;python3和arcgis10.2.其中anaconda3带有python3&#xff0c;arcgis10.2自带python2.7。arcgis不能正常使用&#xff0c;之前为了使用arcgis&#xff0c;因此卸载了anaconda3和python3&#xff0c;PyCharm不能正常使用了 之前安装的卸载后…...

【C语言干货】回调函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、回调函数 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、回调函数 在 C 语言中&#xff0c;当你有一个函数并希望将其作…...

Redis使用总结

NoSQL 1.1为什么要用NoSQL 面对现在用户数据的急剧上升&#xff0c;我们需要对这些用户数据进行挖掘&#xff0c;传统的关系型数据库已经不适合这些 应用了.Nosql 的发展可以很了的处理这些大的数据. 1.2什么是NoSQL Not Only Sql->NoSQL(不仅仅是SQL) 非关系型数据库.随…...

现场问题排查-postgresql某表索引损坏导致指定数据无法更新影响卷宗材料上传

问题现象 今天突然被拉进一个群&#xff0c;说某地区友商推送编目结果报错&#xff0c;在我们自己的卷宗系统上传材料也一直转圈&#xff0c;也删除不了案件卷宗&#xff0c;重置模板也没用&#xff0c;只有个别案件有问题。虽然这事儿不属于我负责&#xff0c;但还是抽时间给…...

数字化转型的未来趋势:从工具到生态,聚焦生态合作、绿色转型与全球化布局

摘要 本文将深入探讨了数字化转型的演进路径&#xff0c;特别是从依赖单一数字化工具向构建和参与复杂商业生态系统的战略转变。分析表明&#xff0c;这一转变不仅是技术升级&#xff0c;更是商业模式、运营逻辑和价值创造方式的根本性变革。云计算、人工智能和大数据分析等 f…...

记录学习记录学习《手动学习深度学习》这本书的笔记(九)

马不停蹄地来到了第十二章&#xff1a;计算性能…… 感觉应该是讲并行计算方面的&#xff0c;比如GPU、CPU、CUDA那些。 第十二章&#xff1a;计算性能 12.1 编译器和解释器 这里先提出了命令式编程和符号式编程的概念。 命令式编程VS符号式编程 目前为止&#xff0c;本书…...

麒麟系统通过 Service 启动 JAR 包的完整指南

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

【记录maven依赖规则-dependencyManagement,dependencies】

记录maven依赖规则-dependencyManagement&#xff0c;dependencies 依赖方式 直接依赖 间接依赖 依赖关系 直接依赖&#xff1a; 父级管理定义的版本&#xff0c;并且在中进行引用了的版本。 优先使用dependencyManagement定义的版本。 间接依赖&#xff1a; 如果间接依赖…...

macos下mysql 5.7/8.0版本切换

1、首先安装好mysql 5.7/8.0&#xff0c;可以用brew进行安装 5.7 的原始配置文件路径&#xff1a; /usr/local/Cellar/mysql5.7/5.7.44_1/homebrew.mxcl.mysql5.7.plist 配置内容如下&#xff1a; 对应的.cnf配置文件内容如下&#xff1a; 8.0 的原始配置文件路径&#xff1…...

FPGA时钟设计

实现功能&#xff1a;基于Verilog的动态显示时钟设计&#xff0c;支持整点&#xff08;时:00:00&#xff09;闪烁功能。代码包含时钟计数、动态扫描、整点检测和闪烁控制模块&#xff1a; module dynamic_clock(input clk, // 主时钟&#xff08;假设50MHz&#xff0…...

【NVM】管理不同版本的node.js

目录 一、下载nvm 二、安装nvm 三、验证安装 四、配置下载镜像 五、使用NVM 前言&#xff1a;不同的node.js版本会让你在使用过程很费劲&#xff0c;nvm是一个node版本管理工具&#xff0c;通过它可以安装多种node版本并且可以快速、简单的切换node版本。 一、下载nvm htt…...

【今日三题】笨小猴(模拟) / 主持人调度(排序) / 分割等和子集(01背包)

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;每日两三题 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 笨小猴(模拟)主持人调度(排序)分割等和子集(01背包) 笨小猴(模拟) 笨小猴 #include <iostream> #include <string…...

android10 卸载应用出现回退栈异常问题

打开设置&#xff0c;打开APP1&#xff0c;使用adb uninstall 卸载APP1/或者杀掉APP1进程&#xff0c;没有回到设置而是回到了桌面 抓取eventlog&#xff0c;查看ams/wms打印&#xff0c;发现“am_focused_stack: appDied leftTaskHistoryEmpty”源码中搜索“leftTaskHistoryE…...

位置差在坐标系间的相互转换

1 NED转经纬高 &#xff08;n 系下的北向、东向和垂向位置差异&#xff08;单位 m&#xff09;转化为纬度、经度和高程分量的差异&#xff09; 2 基站坐标转换 纬度、经度、高程 到 ECEF %纬度、经度、高程 到 ECEF clc; clear; glvs; addpath(genpath(E:\GNSSINS\ACES)…...

在线重定义——分区表改造

在数据库管理过程中&#xff0c;随着数据量的不断增长&#xff0c;普通表的查询、维护成本不断上升。为了提升查询性能和管理效率&#xff0c;通常需要将大表进行分区处理。 本文介绍如何使用 Oracle 在线重定义&#xff08;DBMS_REDEFINITION&#xff09; 的方式对现有大表进行…...

day51—二分法—x 的平方根(LeetCode-69)

题目描述 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 …...

网络安全漏洞现状与风险管理分析

在当今数字化时代&#xff0c;网络安全已成为企业和组织不可忽视的核心问题。网络环境的日益复杂和攻击手段的不断升级&#xff0c;使得漏洞管理成为网络安全战略中的关键环节。下面将详细分析当前网络安全领域的漏洞现状及有效的风险管理策略。 当前网络安全面临的挑战 高危漏…...

二、Web服务常用的I/O操作

一、单个或者批量上传文件 前端&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文件…...

Pinia——Vue的Store状态管理库

一、Store 是什么&#xff1f; Store (如 Pinia) 是一个保存状态和业务逻辑的实体&#xff0c;它并不与你的组件树绑定。换句话说&#xff0c;它承载着全局状态。它有点像一个永远存在的组件&#xff0c;每个组件都可以读取和写入它。它有三个概念&#xff0c;state、getter 和…...

生成式人工智能认证(GAI认证)适合那些人考?

在人工智能浪潮席卷全球的今天,你是否曾思考过:当机器开始创作诗歌、设计建筑、撰写代码,甚至模拟人类思维时,我们该如何与这个“新物种”共处?更关键的是,当生成式人工智能(Generative AI)从实验室走向千行百业,谁将成为驾驭这场技术革命的“领航者”?答案或许藏在一…...

使用cmd来创建数据库和数据库表-简洁步骤

创建数据库和表&#xff1a; 1. 按WinR打开“运行”&#xff0c;输入cmd&#xff0c;回车 2. 登录数据库&#xff1a;mysql -u root -p 然后输入密码 3. 创建数据库create database myblog; myblog为数据库名(自定义你的数据库名) &#xff01;注意分号不要漏了&#xff01; …...

微博安卓版话题热度推荐算法与内容真实性分析

微博是目前最受欢迎的社交平台之一&#xff0c;它的推荐算法在推动话题热度和内容传播方面发挥着重要作用。然而&#xff0c;这一算法也引发了对于内容真实性的担忧。本文将通过分析微博安卓版的推荐机制&#xff0c;探讨其对话题热度的影响以及内容真实性问题。 微博的推荐算法…...

助力产业升级 | BMC安全启动方案上新了!

近日&#xff0c;OurBMC 社区联合其理事成员单位中移&#xff08;苏州&#xff09;软件技术有限公司&#xff0c;在产业化落地SIG发布计算机系统安全可信创新解决方案——《 BMC 安全启动方案》。该方案为开发者提供了清晰、可实现的技术实施路径&#xff0c;可有效助力开发者提…...

Python中使用Redis的参数

Python中使用Redis通常是通过redis-py这个库来实现的。redis-py是一个Python客户端&#xff0c;它提供了对Redis数据库的完整操作接口。在使用redis-py时&#xff0c;你需要通过连接参数来配置与Redis服务器的连接。下面是一些常用的连接参数及其解释&#xff1a; host 描述&…...

tensorflow使用详解

一、TensorFlow基础环境搭建 安装与验证 # 安装CPU版本 pip install tensorflow# 安装GPU版本&#xff08;需CUDA 11.x和cuDNN 8.x&#xff09; pip install tensorflow-gpu# 验证安装 python -c "import tensorflow as tf; print(tf.__version__)"核心概念 Tensor…...

FreeMarker语法深度解析与Node.js集成实践指南

一、FreeMarker核心语法体系 1.1 基础模板结构 <#-- 注释语法 --> ${expression} <#-- 输出表达式 --> <#directive paramvalue> <#-- 指令语法 -->1.2 数据类型处理 标量类型深度处理&#xff1a; <#assign num 123.45?floor> <#--…...

如何实现一个可视化的文字编辑器(C语言版)?

一、软件安装 Visual Studio 2022 Visual Studio 2022 是微软提供的强大集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛用于C/C、C#、Python等多种编程语言的开发。它提供了许多强大的工具&#xff0c;帮助开发者编写、调试和优化代码。 1.下载 Visual Studio 202…...

学习海康VisionMaster之路径提取

一&#xff1a;进一步学习了 今天学习下VisionMaster中的路径提取&#xff1a;可在绘制的路径上等间隔取点或查找边缘点 二&#xff1a;开始学习 1&#xff1a;什么是路径提取&#xff1f; 相当于事先指定一段路径&#xff0c;然后在对应的路径上查找边缘&#xff0c;这个也是…...

【MCP Node.js SDK 全栈进阶指南】中级篇(6):MCP与Web框架集成

背景 在现代Web开发生态中,框架已成为构建高效、可维护应用的核心基础设施。将MCP TypeScript-SDK与流行的Web框架集成,能够充分发挥两者的优势,构建功能丰富、交互智能的现代应用。本文将深入探讨MCP与主流Web框架的集成方法、最佳实践和架构设计,帮助开发者构建强大而灵…...

vue3+vite 项目中使用 Echarts 5.0 按需引入教程

效果图 第一步&#xff0c;封装 ECharts 工具函数 在 utils 目录下新建一个 echarts.js 文件&#xff0c;位置随意这里只引入了 折线图和拼团&#xff0c;需要其他的图自行引入 import * as echarts from "echarts/core"; import { LineChart, PieChart } from "…...

Unreal Engine 实现软件测试方案的仿真体验

以下将以一款模拟物流仓储管理软件的测试为例&#xff0c;详细阐述如何利用 Unreal Engine 实现软件测试方案的仿真体验。 1. 明确测试目标与需求 功能方面&#xff1a;要验证货物出入库管理、库存盘点、货物定位、叉车调度等功能的准确性和稳定性。性能方面&#xff1a;测试…...

蓝绿部署的详细规划文档

一、蓝绿部署概述 蓝绿部署是一种通过运行两套完全相同的生产环境(蓝色和绿色)实现零停机发布的策略。核心流程为:在绿色环境部署新版本并验证通过后,将流量逐步切换至绿色环境,若出现问题可快速回滚至蓝色环境。该策略适用于对可用性要求极高的系统(如金融、电商),可…...

【SpringMVC】概念引入与连接

目录 1.前言 2.正文 2.1SpringMVC是什么 2.2详解RequestMapping注解 2.3创建Spring项目 2.4建立连接 2.5Postman 3.小结 1.前言 哈喽大家好&#xff0c;今天来给大家带来Spring相关的学习&#xff0c;主要内容有概念的讲解以及如何分别通过Java代码和工具Postman来建立…...

NodeJs模块化与JavaScript的包管理工具

Js&#xff1a;模块化规范的文章链接&#xff1a;https://blog.csdn.net/Y1914960928/article/details/131793004?spm1011.2415.3001.5331 一、模块化&#xff1a; 1、导入文件的注意事项&#xff1a; ① 导入路径建议写 相对路径&#xff0c;且不能省略 ./ 和 ../ ② 文件…...

一、接口测试01

目录 一、接口1. 概念2. 接口的类型 二、接口测试1. 概念 三、HTTP协议1. HTTP协议简介2. URL格式2.1 练习 3. HTTP请求3.1 整体格式3.2 fiddler 抓包验证3.3 请求行3.4 请求头3.5 请求体3.6 练习 4. HTTP响应4.1 整体格式4.2 状态行4.3 响应头4.4 响应体4.5 练习 5. 传统风格接…...