【力扣 459】重复的子字符串 C++题解(子字符串+字符串匹配)

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

示例 1:

输入: s = “abab”
输出: true
解释: 可由子串 “ab” 重复两次构成。
示例 2:

输入: s = “aba”
输出: false
示例 3:

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

提示:

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


思路

如果一个字符串是由其子串重复多次构成的,那么通过将两个这样的字符串连接起来,并移除第一个和最后一个字符,你仍然可以得到原始的字符串。

举个例子,假设我们有一个字符串 “abcabc”,它是由 “abc” 这个子串重复两次构成的。我们将两个 “abcabc” 连接起来得到 “abcabcabcabc”,然后移除第一个和最后一个字符得到 “bcabcabcab”。你会发现,原始的 “abcabc” 还在这个新的字符串中。

因此,我们可以通过创建字符串 s + s,然后移除第一个和最后一个字符,看原始的字符串 s 是否还存在于新的字符串中。如果存在,那么 s 就是由其子串重复多次构成的。

首先,函数将s与自身拼接,得到一个新的字符串s + s。然后,函数从这个新字符串的第二个字符开始,取长度为s.length() * 2 - 2的子串,即(s + s).substr(1, s.length() * 2 - 2)。这个子串实际上就是去掉了第一个和最后一个字符的s + s

接着,函数在这个子串中查找s,如果找到,就返回s在子串中的位置,如果找不到,就返回string::npos。在C++中,string::npos的值等于-1,这是一个特殊的值,表示未找到。

然而,函数的返回值应该是一个布尔值,而不是一个整数。所以,函数使用了按位取反运算符~find的返回值进行了处理。这样,如果找到sfind返回非负数,~find返回负数,转换为布尔值为true;如果找不到sfind返回string::npos即-1,~find返回0,转换为布尔值为false


AC代码

/** @lc app=leetcode.cn id=459 lang=cpp** [459] 重复的子字符串*/// @lc code=start
class Solution {
public:bool repeatedSubstringPattern(string s) {return ~(s + s).substr(1, s.length() * 2 - 2).find(s);}
};
// @lc code=end

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

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

相关文章

一文get懂kwai短视频助力巴西博弈slots游戏广告优势

一文get懂kwai短视频助力巴西博弈slots游戏广告优势 在数字化时代&#xff0c;短视频广告凭借其独特的魅力和高效的传播方式&#xff0c;成为了各大品牌进行营销推广的重要手段。特别是在巴西这个充满活力的国家&#xff0c;kwai短视频广告以其独特的方式&#xff0c;为博弈游…

Spring Boot中使用JWT进行安全认证

Spring Boot中使用JWT进行安全认证 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 在现代的Web应用程序中&#xff0c;安全认证是至关重要的一环。J…

【Android面试八股文】1.你在工作中,fragment与activity通信是怎么做的 ? 2.请你说说Fragment生命周期函数的意义 ?

文章目录 1.你在工作中,fragment与activity通信是怎么做的 ?1.1. 接口回调1.2 直接调用Activity方法1.3. ViewModel2.请你说说Fragment生命周期函数的意义 ?2.1 Fragment生命周期函数2.2 Fragment的创建流程2.3 Fragment变为不可见状态2.4 Fragment由不可见变为部分可见状态…

电子技术基础(模电部分)笔记

终于整理出来了&#xff0c;可以安心复习大物线代了&#xff01;&#xff01; 数电部分预计7.10出

自动雪深传感器的类型

TH-XL2随着科技的飞速发展&#xff0c;气象监测技术也在不断进步。在降雪天气频发的冬季&#xff0c;雪深数据对于保障道路交通、农业生产和电力供应等具有至关重要的作用。自动雪深传感器作为气象监测的重要工具&#xff0c;其类型多样、功能各异&#xff0c;为气象数据的准确…

使用Vue 3 + DataV搭建大数据可视化大屏技术框架实战指南

在大数据时代&#xff0c;数据可视化成为了企业和组织理解复杂数据的关键手段。Vue 3&#xff0c;作为新一代的前端框架&#xff0c;以其更高效的性能和更灵活的Composition API吸引了众多开发者。而DataV&#xff0c;阿里巴巴开源的数据可视化组件库&#xff0c;专为大屏幕展示…

【区分vue2和vue3下的element UI Tabs 标签页组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Element UI&#xff08;针对 Vue 2&#xff09;和 Element Plus&#xff08;针对 Vue 3&#xff09;中&#xff0c;Tabs 标签页组件通常被称为 el-tabs。虽然两个版本在 API 和实现上可能有一些细微的差别&#xff0c;但基本概念和用法是相似的。下面我将分别介绍在 Vue 2 的…

Flutter全栈实战课程:与大地老师共铸移动开发新篇章!

想要成为Flutter领域的佼佼者吗&#xff1f;想要掌握从基础到高级、从实战到创新的全方位技能吗&#xff1f;大地老师倾力打造的Flutter全栈实战课程&#xff0c;将带你开启移动开发的新世界&#xff01; 17 Flutter介绍-Flutter Windows Android环境搭建 真机调试 &#x1f68…

Android开发系列(十二)Jetpack Compose之BottomSheet

BottomSheet 是 Android 中一个常用的 UI 组件&#xff0c;它通常用于显示从屏幕底部弹出的用户界面。Jetpack Compose 是 Android 中的一个全新 UI 工具包&#xff0c;它提供了一种声明式的方式来构建用户界面。Jetpack Compose 中也有一个名为 BottomSheet 的组件&#xff0c…

在C++中内存泄露的几种情况及解决内存泄露和指针越界有哪些方法?

一、在C中&#xff0c;内存泄露通常指的是程序在动态分配内存后未能正确地释放这些内存&#xff0c;导致系统资源被持续占用而无法被其他程序或该程序的后续部分使用。以下是C中内存泄露的几种常见情况&#xff0c;按照不同的原因进行分类和归纳&#xff1a; 忘记释放内存&…

Fragment切换没变化?解决办法在这里

大家好&#xff0c;今天跟大家分享下如何避免fragment切换失败。方法其实很简单&#xff0c;只要在onCreate方法中初始化一个默认的fragment即可。 //开始事务FragmentTransaction transaction getActivity().getSupportFragmentManager().beginTransaction();transaction.rep…

本地文件同步上传到Gitee远程仓库

1、打开我们的项目所在文件夹 2、在项目文件夹【鼠标右击】弹出菜单&#xff0c;在【鼠标右击】弹出的菜单中&#xff0c;点击【Git Bash Here】&#xff0c;弹出运行窗口&#xff08;前提条件是已装好git环境&#xff09; 3、在命令窗口中输入&#xff1a;git init 4、在 Gite…

基于STM32的智能门锁控制系统

目录 引言环境准备智能门锁控制系统基础代码实现&#xff1a;实现智能门锁控制系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;门锁管理与优化问题解决方案与优化收尾与总结 1. 引言 智能门锁控制系统通过使用STM32嵌…

NewspaceGPT带你玩系列之登录页

目录 注册一个账号&#xff0c;用qq邮箱&#xff0c;然后登录选一个可用的Plus&#xff0c;不要选3.5探索GPT今天的主角是HubSpot的登录页创建者问答继续问&#xff1a;答继续交流答看看结果&#xff0c;我有点崩溃重新简单来一次试试&#xff0c;下面开始一个新的登录页请求问…

昇思25天学习打卡营第5天|网络与模型相关要素探讨

目录 从 MindSpore 模块中导入nn和ops 定义模型类 模型层 nn.Flatten nn.Dense nn.ReLU nn.SequentialCell nn.Softmax 模型参数 从 MindSpore 模块中导入nn和ops 将 MindSpore 整个模块引入到当前的 Python 脚本里&#xff0c;方便后续运用 MindSpore 所提供的各类功能…

Http请求和响应的格式

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;请求和响应遵循特定的格式&#xff0c;这些格式基于请求行、请求头、请求体&#xff08;可选&#xff09;以及响应行、响应头和响应体&#xff08;可选&#xff09;。以下是一个简单的HTTP请求和响应的例子来说明这些格…

基于python的房价多元线性回归分析

1.导入必要的库 import pandas as pd import numpy as np import statsmodels.api as sm from sklearn.model_selection import train_test_split from sklearn.metrics import r2_score import matplotlib.pyplot as plt # 忽略Matplotlib的警告&#xff08;可选&…

GP37-S-N、GP37-S-E、GP37-S-R比例电磁铁驱动放大器

比例阀用电磁铁EP45-C、EP37-E、EP45-G、EP45-N、GP37-3-A、GP37-S-N、GP37-S-E、GP37-S-R在直流12V/24V的电液比例控制系统中与BEUEC比例控制放大器配套使用&#xff0c;共同作用于比例阀的控制。电磁铁输出力通过负载弹簧转换成位移&#xff0c;实现电流-力-位移线性转换&…

.NET 矩阵6月红队工具和资源集合

01外网入口打点 1.1 Sharp4WbemScripting 1.2 ASP4Eval 1.3 Sharp4Web.config 1.4 Sharp4AddScript 02安全防御绕过 2.1 Sharp4DefenderStop 03搭建代理隧道 3.1 Sharp4suo5 04混淆加密防护 4.1 Obfuscar混淆器 4.2 Sharp4BatchGuard 05安全技术文档 5.1 .NET 通过Junction Fol…

基于flask的闪现、g对象、蓝图

【 一 】闪现&#xff08;flash&#xff09; # 1 flask中得闪现存放数据的地方&#xff0c;一旦取了&#xff0c;数据就没了-实现跨请求间传递数据 # 2 django中有没有类似的东西&#xff1f;message 消息框架# 3 基本使用1 设置&#xff1a;flash(欢迎你、欢迎来到澳门赌场&a…