基础刷题50之五(重复的子字符串)

news2024/11/19 9:30:20

文章目录

  • 前言
  • 一、题目
  • 二、力扣官方解释
    • 1、枚举
    • 2、字符串匹配
  • 三、文心一言解释
    • 1、枚举
    • 2、字符串匹配
  • 总结


前言

刚上研一,有人劝我好好学C++,当时用的不多就没学,现在毕业上班了。在此亡羊补牢了
在此感谢力扣和文心一言

一、题目

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
在这里插入图片描述

二、力扣官方解释

1、枚举

在这里插入图片描述

class Solution {
public:
    bool repeatedSubstringPattern(string s) {
        int n = s.size();
        for (int i = 1; i * 2 <= n; ++i) {
            if (n % i == 0) {
                bool match = true;
                for (int j = i; j < n; ++j) {
                    if (s[j] != s[j - i]) {
                        match = false;
                        break;
                    }
                }
                if (match) {
                    return true;
                }
            }
        }
        return false;
    }
};

2、字符串匹配

在这里插入图片描述

public:
    bool repeatedSubstringPattern(string s) {
        return (s + s).find(s, 1) != s.size();
    }
};

三、文心一言解释

1、枚举

int n = s.size();:获取字符串s的长度,并存储在变量n中。

for (int i = 1; i * 2 <= n; ++i) {:这是一个循环,用于尝试所有可能的子串长度。这里,i从1开始,并且每次增加1,直到i的两倍超过n为止。这是因为,如果子串长度为i,那么它至少需要重复两次才能构成整个字符串,所以i * 2必须小于或等于n。

if (n % i == 0) {:这个条件检查n是否可以被i整除。如果不可以,那么长度为i的子串不可能重复构成整个字符串s,因此可以跳过当前的i值。

在if条件块内部,bool match = true;初始化一个标志变量match,用于跟踪是否找到了匹配的重复子串。

for (int j = i; j < n; ++j) {:这是一个内层循环,用于比较子串的每一个字符是否都匹配。这里,j从i开始,因为子串的第一个字符与字符串s的第i个字符对应。

if (s[j] != s[j - i]) {:这个条件检查当前字符s[j]是否不等于它应该匹配的字符s[j - i]。如果不相等,那么match被设置为false,并且跳出内层循环。

if (match) { return true; }:如果match仍然是true(即没有在任何地方发现不匹配的字符),那么方法返回true,表示找到了一个可以重复构成整个字符串的子串。
如果循环结束后没有找到匹配的重复子串,方法返回false。

2、字符串匹配

return (s + s).find(s, 1) != s.size()
s + s:首先,将字符串s与自身拼接,得到一个新的字符串,其长度是s的两倍。
.find(s, 1):然后,在拼接后的字符串中从索引1(即第二个字符)开始搜索原始字符串s。find函数返回找到的子串的起始索引。如果s是一个重复子串,那么它会在拼接后的字符串中从第二个位置开始再次出现。

!= s.size():如果find函数返回的值不等于s.size(),说明在拼接后的字符串中找到了s,并且这个s不是从拼接字符串的起始位置开始的(因为起始位置搜索是从索引1开始的)。这就表明s是由某个子串重复构成的。

如果s不是由某个子串重复构成的,那么find函数将返回string::npos(通常是最大的可能size_t值),这将导致比较结果为true(因为string::npos肯定不等于s.size()),但函数实际上应该返回false。然而,这里的逻辑是反过来的:如果find返回的不是s.size(),函数返回true;否则(即find返回string::npos),由于比较失败,函数将隐式返回false。因此,这个函数实际上正确地实现了所需的功能。
`

总结

早学早烧脑,晚学来后悔

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

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

相关文章

Python图像处理【22】基于卷积神经网络的图像去雾

基于卷积神经网络的图像去雾 0. 前言1. 渐进特征融合网络2. 图像去雾2.1 网络构建2.2 模型测试 小结系列链接 0. 前言 单图像去雾 (dehazing) 是一个具有挑战性的图像恢复问题。为了解决这个问题&#xff0c;大多数算法都采用经典的大气散射模型&#xff0c;该模型是一种基于单…

ECharts饼图图例消失踩的坑

在使用Echarts的饼图时&#xff0c;当时做法是在图例数小于8时显示全部的图例&#xff0c;在大于8的时候显示前8个图例。于是用了两种不同的方式处理。导致出现切换时间后图例不显示的情况。 错误过程&#xff1a; 在进行图例生成时采用了两种不同的方式&#xff1a; ①如果…

Redis底层源码分析系列(前提准备)

文章目录 一、 面试题二、 源码分析1. 源码导入2. 源码核心部分 一、 面试题 1. redis跳跃列表了解吗&#xff1f;这个数据结构有什么缺点&#xff1f; 2. redis项目里面怎么用&#xff1f; redis的数据结构都了解哪些&#xff1f; 3. redis的zset底层实现&#xff1f; redi…

深入理解Servlet

目录&#xff1a; ServletWeb开发历史Servlet简介Servlet技术特点Servlet在应用程序中的位置Tomcat运行过程Servlet继承结构Servlet生命周期Servlet处理请求的原理Servlet的作用HttpServletRequest对象HttpServletResponse对象ServletContext对象ServletConfig对象Cookie对象与…

Constrained Iterative LQR 自动驾驶中使用的经典控制算法

Motion planning 运动规划在自动驾驶领域是一个比较有挑战的部分。它既要接受来自上层的行为理解和决策的输出,也要考虑一个包含道路结构和感知所检测到的所有障碍物状态的动态世界模型。最终生成一个满足安全性和可行性约束并且具有理想驾驶体验的轨迹。 通常,motion plann…

微信小程序开发系列(二十八)·小程序API如何发送网络请求以及网络请求失败后的解决方法

目录 1. 小程序API介绍 2. 网络请求 2.1 网络请求失败解决方法 2.2 如何跳过域名校验 1. 小程序API介绍 小程序开发框架提供丰富的微信原生API&#xff0c;可以方便的调起微信提供的能力&#xff0c;例如&#xff1a;获取用户信息、微信登录、微信支付等&#xff0c;小…

“antd“: Unknown word.cSpell

你遇到的问题是 VS Code 的 Code Spell Checker 插件在检查拼写时&#xff0c;将 "antd" 标记为未知单词。"antd" 是 Ant Design 的缩写&#xff0c;是一个流行的 React UI 库&#xff0c;不是一个英语单词&#xff0c;所以 Spell Checker 会将其标记为错误…

Microsoft SQL Server 编写汉字转拼音函数

目录 应用场景 举例 函数实现 小结 应用场景 在搜索应用中&#xff0c;我们一般会提供一个搜索框&#xff0c;输入关健字&#xff0c;点击查询按钮以获取结果数据。大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果。这样可以简化用户的操作&…

游戏资讯网站系统aspnet+sqlserver

aspnet游戏资讯网站系统本网站采用三层架构编写 有增删查改全部功能 使用了objectDataSource 新技术&#xff1a;采用bootstrap前端框架 dntb控件 随着游戏行业的快速发展&#xff0c;越来越多的玩家需要一个了解全面游戏资讯信息的平台。 充分做了可行性分析后&#xff0c;我…

从零学习Linux操作系统 第三十五部分 Ansible中的角色

一、理解roles在企业中的定位及写法 #ansible 角色简介# Ansible roles 是为了层次化&#xff0c;结构化的组织Playbookroles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中&#xff0c;并可以便捷地include它们roles一般用于基于主机构建服务的场景中&…

如何将视频内容转换为文字文稿?这三款工具助您实现视频转写!

在日常生活中&#xff0c;有时我们需要将视频中的内容转换为文字文稿以便于搜索、编辑或分享。但选择合适的视频转文字软件可能让人感到困惑。今天我将为您推荐三款优秀的视频转文字工具&#xff0c;它们操作简单、准确高效&#xff0c;能够帮助您快速完成视频内容转写的工作。…

MySQL三种日志

一、undo log&#xff08;回滚日志&#xff09; 1.作用&#xff1a; &#xff08;1&#xff09;保证了事物的原子性 &#xff08;2&#xff09;通过read view和undo log实现mvcc多版本并发控制 2.在事务提交前&#xff0c;记录更新前的数据到undo log里&#xff0c;回滚的时候读…

企业智能化转型的关键步骤与陷阱

目录 前言1 转型的关键步骤1.1 深度学习AI技术课程的重要性1.2 激发创意&#xff0c;开展多样化项目的战略意义1.3 招募机器学习专业人才的加速转型1.4 引入具备领导力的AI领导1.5 建立与AI领导的紧密沟通机制 2 智能化转型的陷阱2.1 谨慎期待AI解决所有问题的智慧2.2 综合考虑…

Docker进阶:深入理解 Dockerfile

Docker进阶&#xff1a;深入理解 Dockerfile 一、Dockerfile 概述二、为什么要学习Dockerfile三、Dockerfile 编写规则四、Dockerfile 中常用的指令1、FROM2、LABEL3、RUN4、CMD5、ENTRYPOINT6、COPY7、ADD8、WORKDIR9、 ENV10、EXPOSE11、VOLUME12、USER13、注释14、ONBUILD 命…

Vue+SpringBoot打造独居老人物资配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4.2 新增物资4.3 查询物资4.4 查询物资配送4.5 新增物资配送 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的独居老人物资配送系统&#xff0c;包含了社区档案、…

几何变换 - 图像的缩放、翻转、仿射变换、透视等

1、前言 图像的几何变换是指改变图像的几何结构,大小、形状等等,让图像呈现出具备缩放、翻转、映射和透视的效果 图像的几何变换都比较复杂,计算也很复杂。 例如仿射变换,像素点的位置和灰度值都需要变换。 数字图像处理中利用后向传播的方法,将像素点变换后的位置通过…

统信OUS安装node, npm,vue (亲测有效)

统信OUS安装node, npm,vue &#xff08;1&#xff09;查看自己的系统 uname -a&#xff08;2&#xff09;进入nodejs官网下载相应版本 &#xff08;3&#xff09;找个位置解压&#xff0c;然后复制文件目录 保存好地址&#xff0c;等下要用到 &#xff08;4&#xff09;编辑环…

PostgreSQL索引篇 | GiST索引

PostgreSQL版本为8.4.1 &#xff08;本文为《PostgreSQL数据库内核分析》一书的总结笔记&#xff0c;需要电子版的可私信我&#xff09; 索引篇&#xff1a; PostgreSQL索引篇 | BTreePostgreSQL索引篇 | GIN索引PostgreSQL索引篇 | Hash索引PostgreSQL索引篇 | TSearch2 全文…

Java高级编程—注解

文章目录 1.注解的概述2.常见的Annotation示例2.1 生成文档相关的注解2.2 在编译时进行格式检查的注解2.3 跟踪代码依赖性&#xff0c;实现替代配置文件功能的注解 3.自定义Annotation4.JDK中的元注解4.1 Retention4.2 Target4.3 Documented & Inherited 5. JDK8中注解的新…

什么是VR虚拟现实创作工具|元宇宙文化旅游|VR设备在线购买

VR虚拟现实创作工具是用于创建、编辑和制作虚拟现实内容的软件或硬件工具。这些工具提供了创作者在虚拟现实环境中进行创作的功能和自由度&#xff0c;使他们能够构建令人惊叹的虚拟世界和交互体验。 以下是一些常见的VR虚拟现实创作工具&#xff1a; 虚拟现实建模工具&#x…