字符串专题-LeetCode:剑指 Offer 58 - II. 左旋转字符串、LeetCode 459.重复的子字符串、 代码思路和注意点

2023-11-03

一、剑指 Offer 58 - II. 左旋转字符串

在这里插入图片描述
思路:

  1. 预留出n个字符空间s.resize(s.size()+n),把前n个字符存在s的最后面,整体前移
  2. 也可以直接开辟一个新的空间,先存后n个字符,再存前n个字符
  3. 不开辟额外空间,通过局部反转+整体反转,达到左旋转的目的,实现如下:
  • 局部反转:前n个反转ba;后s.size()-1-n个反转gfedc bagfedc
  • 整体反转:cdefgba
void reverse(string& s, int start, int end)
{
    for(int i=start,j=end;i<j;i++,j--)
    {
        swap(s[i], s[j]);
    }
}
string reverseLeftWords(string s, int n) {
    //1、局部反转:前n个反转ba;后s.size()-1-n个反转gfedc  bagfedc
    reverse(s, 0, n-1);
    reverse(s, n, s.size()-1);
    reverse(s, 0, s.size()-1);
    return s;
}

二、LeetCode 459.重复的子字符串

思路:

  1. 如果s可以由重复子串构成,那么s+s也可以由重复子串构成。
  2. 假设s=a1+a2,a1和a2完全相同,那么s+s也可以由a1和a2组成,即s+s’=a1+a2+a1’+a2’,**a2+a1’**也组成s。

代码展示

class Solution {
public:
    bool repeatedSubstringPattern(string s) {
        //1. 拼接
        string t = s+s;

        //2. 去头尾 避免直接找前s和后s 而不是中间的s
        t.erase(t.begin());
        t.erase(t.size()-1);
        //3. 找中间s std::string::npos 默认-1  
        if(t.find(s)!=std::string::npos) return true;
        
        //2和3等价于  if(t.find(s,1)!=s.size()) return true;
        return false;
    }
};

注意点:

  1. 在s+s中找s时,要去掉s+s的首尾字符,否则找的就是前面或者后面的s,而不是中间的s,这样就会失去意义。
  2. string& erase(int pos, int n = npos); —————删除从Pos开始的n个字符,只有一个参数时,
  3. std::string::npos 静态常量,默认值为-1,不存在的位置
  4. 不能 if(t.find(s)!=t.size()) return true; 对于只有三个字符的情况无法剔除,例如aba这种情况无法剔除
  5. 代码中的2和3步骤相当于if(t.find(s,1)!=s.size()) return true;。此时从索引的第二个位置开始查找,如果不是字符串的结束位置,说明找到中间的s
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串专题-LeetCode:剑指 Offer 58 - II. 左旋转字符串、LeetCode 459.重复的子字符串、 代码思路和注意点 的相关文章

  • “大湾区杯”金融数学建模赛后闲谈

    上个月中 2020年10月 同学推给我的这个比赛 和其他数学建模大赛不同的是 这是一个金融方向的建模比赛 因为是第一届 所以我想获奖的几率应该还蛮大的 就兴致冲冲的找队友参加了 以下是我参加本次比赛的经验 写下来供以后来参赛的同学参考 关于

随机推荐

  • 【华为OD】

    目录 一 题目描述 二 输入描述 三 输出描述 示例一 输入 输出 示例二 输入 输出 四 Java玩法 一 题目描述 在一长方形停车场内 每个车位上方都有对应监控器 当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时 监控器才需
  • E280-2G4T12S(SX1280)_STM21F1X驱动分享

    根据需求 我们需要实现的功能有 1 工作模式的切换 2 接收数据的存储处理 3 发射数据的准备 4 通信逻辑的设计 SX1280驱动开发的主要步骤如下 初始化 工作模式的切换 测试结果 1 1 初始化 首先参考手册的硬件连接 控制芯片的工作
  • 力扣之各位相加(给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。)

    各位相加 题目描述 给定一个非负整数 num 反复将各个位上的数字相加 直到结果为一位数 示例 输入 38 输出 2 解释 各位相加的过程为 3 8 11 1 1 2 由于 2 是一位数 所以返回 2 var addDigits funct
  • 区块链+社交=颠覆性的革新?

    要说在如今互联网时代 最有价值的应用是什么 毫无疑问 是社交 不论是微信 微博还是Facebook或者Twitter 这些社交媒体的出现 都让人们有了更快获取信息的途径与渠道 同时在社交媒体平台中由于用户也在不断产生新的内容 因此获得了非常
  • 分布式爬虫调度及数据管理系统[Python]

    一 摘要 本系统主要包括三大部分 Scrapy爬虫部分 Flask任务调度API部分及Django后台管理部分 三大部分相对独立又有一些内在联系 如果想单独学习某一框架可以单独只看某一部分 非常适合刚接触某框架并想深入学习的同学拿来练手 本
  • docker部署excalidraw画图工具

    docker部署excalidraw画图工具 环境搭建 安装docker 安装docker compose 部署excalidraw画图工具 准备工作 配置yaml DIY 自定义网站title 自定义字体 修改完成后 最后重启服务 环境搭
  • vue提交ajax表单,Vue使用axios AJAX提交请求方法,表单提交

    我们在使用jquery时直接可以使用ajax进行请求数据 提交表单 那我们在使用vue时已经没有jquery了 那么我们怎么提交表单 请求数据呢 我们使用axios 读音 爱克斯ios 以下是知乎读法 好了 我们言归正传 说一说vue怎么使
  • 虚拟服务器怎么不设置锁屏,虚拟机下centos如何取消锁屏_网站服务器运行维护...

    centos系统如何设置显示器不休眠 网站服务器运行维护 centos系统设置显示器不休眠的方法是 1 首先 打开xorg conf文件 2 然后 添加配置 Option BlankTime 0 与 Option SuspendTime 0
  • C语言实例:输出各种形式的九九乘法表

    相信各位学习C语言的小伙伴们 都遇到过打印九九乘法表的问题 本篇文章将会讲述各种形式的九九乘法表的打印 第一种形式 如图 这种形式的九九乘法表也是最简单的一种 我们发现每一行结果的列数等于行数 对于这种有规律的我们都可以通过循环实现 int
  • 【基于Docker-Compose安装ELK日志系统完整操作步骤】

    一 前言 ELK是三个开源软件的缩写 分别是Elasticsearch Logstash Kibana 一般情况下会结合FileBeat使用 Elasticsearch 是个开源分布式搜索引擎 它的特点有 分布式 零配置 自动发现 索引自动
  • Linux 显示隐藏目录或隐藏文件的占用空间

    du sh du命令用来看文件size 是正则式 意思是第一位是点 第二位是除了点以外的字符 第三位是任意字符或者不存在 后面可以再加一个 来包括非隐藏文件 后面还可以接 sort h来对占用空间进行排序 sort 的 k2 可以指明根据第
  • vue + elementui 使用 dialog和form表单时数据渲染问题

    问题 dialog和form表单一起使用 关闭模态框再次点开出现上次数据依旧渲染在上面的问题 解决 加个v if 判断
  • python中以json格式输出log日志

    python中以json格式输出log日志 import json import logging import datetime import socket class HostIp host name None host ip None
  • 程序员都在用的IDE工具,JetBrains系列产品年中更新

    JetBrains是一家捷克的软件开发公司 该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境IntelliJ IDEA 2019年8月 JetBrains进行了年中的第二次更新 本次更新将版本升级到了2019 2 预计
  • Mac电脑调用自带的命令行窗口

    前言 提示 我们都熟悉Windows电脑通过win r即可以快速启动命令行窗口 但是Mac电脑中如何实现调用命令行窗口呐 一 快捷键 command 空格 二 敲入te terinmal的缩写即可 这样就可以快速调出终端了
  • QT实现--电子时钟

    QT 电子时钟 文章目录 QT 电子时钟 简介 1 主窗口 menu h文件 menu cpp文件 2 时钟窗口 widget h文件 widget cpp文件 3 运行效果图 简介 使用了绘图事件 定时事件 有两个窗口 一个窗口用于设置时
  • ‘vue‘不是内部或者外部的命令,也不是可运行的程序或者批处理文件

    vue 不是内部或者外部的命令 也不是可运行的程序或者批处理文件 在cmd中输入vue V时 报错 vue 不是内部或者外部的命令 也不是可运行的程序或者批处理文件 只有两种可能 1 安装vue cil 失败 2 需要手动添加环境变量 在C
  • RS485(一):电路与波形

    一 RS485电路 RS485 Recommended Standard 485 是隶属于OSI模型 物理层的电气特性 规定为 2 线 半双工 平衡传输线的多点异步通信标准 通信采用差分信号传输 典型485应用电路如下图所示 其中 分别控制
  • sort函数排序

    sort函数排序 sort函数可以对数组直接排序 这个函数可以传两个参数或三个参数 第一个参数是要排序的区间首地址 第二个参数是区间尾地址的下一地址 排序的区间是 a b 默认的排序方式是从小到大 如果想从大到小 可以在第三个参数传入gre
  • 字符串专题-LeetCode:剑指 Offer 58 - II. 左旋转字符串、LeetCode 459.重复的子字符串、 代码思路和注意点

    文章目录 一 剑指 Offer 58 II 左旋转字符串 二 LeetCode 459 重复的子字符串 一 剑指 Offer 58 II 左旋转字符串 思路 预留出n个字符空间s resize s size n 把前n个字符存在s的最后面