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

【代码随想录二刷】Day9-字符串-C++

代码随想录二刷Day9

今日任务

28.找出字符串中第一个匹配项的下标
459.重复的子字符串
字符串总结
双指针总结
语言:C++

KMP

链接:https://programmercarl.com/0459.重复的子字符串.html#kmp

  1. 用处:当出现字符串不匹配时,可以利用一部分之前已经匹配的内容,节省匹配时间,避免从头匹配
  2. 前缀表:用来回退的,即记录当模式串与主串不匹配时,模式串应该从哪个位置开始重新匹配;记录下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀
  3. 最长相等前后缀:前缀指不包含最后一个字符的所有以第一个字符开头的连续子串;后缀指不包含第一个字符的所有以最后一个字符结尾的连续子串;前缀表要求的是相同前后缀的长度
  4. 前缀表为什么可以确定匹配失败后跳到哪里重新匹配?
    前缀表利用的是相同前后缀,所以如果在某个位置匹配失败后,可以根据前缀表找到失败位置后缀对应的前缀位置,直接跳到前缀相应位置重新匹配即可
  5. 前缀表和next数组之间的关系?
    next数组可以是前缀表,也可以是前缀表统一减1的结果,和KMP原理无关,主要是根据实现方便程度修改的
  6. 时间复杂度:O(m+n),模式串长度为m,文本串长度为n,建立模式串的时间复杂度为O(m),文本串匹配的时间复杂度为O(n)
  7. next数组构造过程:初始化,处理前后缀不同的情况,处理前后缀相同的情况,更新next数组
void getNext(int* next, string& s){int i = 0; //i表示最大前缀长度,初始化为0next[0] = i;for(int j = 1; j < s.length(); j++){ //j表示最大后缀长度,从1开始//处理前后缀不同的情况while(i > 0 && s[i] != s[j]){i = next[i - 1];}if(s[i] == s[j]){i++;}next[j] = i;}
}
}

28. 找出字符串中第一个匹配项的下标

链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/

class Solution {
public:void getNext(vector<int>& next, string& s){int i = 0;next[0] = i;for(int j = 1; j < s.length(); j++){while(i > 0 && s[i] != s[j]){i = next[i - 1];}if(s[i] == s[j]){i++;}next[j] = i;}}int strStr(string haystack, string needle) {int res = -1;vector<int> next(needle.length());getNext(next, needle);int j = 0; //needlefor(int i = 0; i < haystack.length(); i++){ //haystackwhile(j < next.size() && haystack[i] == needle[j]){i++;j++;}if(j > 0 && j < next.size() && haystack[i] != needle[j]){j = next[j - 1];i--; //这里要减1,否则会错位,比较推荐下面的写法}else if(j == next.size()){res = i - needle.length();break;}}//另一种写法/*for(int i = 0; i < haystack.length(); i++){ //haystackwhile(j > 0 && j < next.size() && haystack[i] != needle[j]){j = next[j - 1];}if(j < next.size() && haystack[i] == needle[j]){j++;}if(j == next.size()){res = i - needle.length() + 1;break;}}*/return res;}
};

459. 重复的子字符串

链接:https://leetcode.cn/problems/repeated-substring-pattern/
若一个字符串由重复子串构成,则最长相等前后缀不包含的子串就是最小重复子串,接下来可以根据长度关系简单判断字符串是否由重复子串构成

class Solution {
public:void getNext(vector<int>& next, string& s){int i = 0;next[0] = i;for(int j = 1; j < s.length(); j++){while(i > 0 && s[i] != s[j]){i = next[i - 1];}if(s[i] == s[j]){i++;}next[j] = i;}}bool repeatedSubstringPattern(string s) {vector<int> next(s.length());getNext(next, s);if(next[next.size() - 1] == 0) return false; //"abac"int len = s.length() - next[next.size() - 1];if(len != 0 && s.length() % len == 0) return true;return false;}
};

相关文章:

【代码随想录二刷】Day9-字符串-C++

代码随想录二刷Day9 今日任务 28.找出字符串中第一个匹配项的下标 459.重复的子字符串 字符串总结 双指针总结 语言&#xff1a;C KMP 链接&#xff1a;https://programmercarl.com/0459.重复的子字符串.html#kmp 用处&#xff1a;当出现字符串不匹配时&#xff0c;可以利…...

google colab上如何下载bert相关模型

首先要知道模型的地址 tensorflow版本的模型&#xff1a; https://storage.googleapis.com/bert_models/2018_10_18/cased_L-12_H-768_A-12.zip https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip pytorch版本的模型 ‘bert-base-cased’: …...

Vue2.0页面缓存机制联合页面标签的交互(keep-alive + router)

预期效果&#xff1a;&#xff08;借助iview-ui的在线体验页面示意一下&#xff09; 项目中只有一部分页面需要缓存&#xff0c;且存在多级路由的页面。每打开一个菜单&#xff0c;就会新增一个 Tab标签&#xff0c;只要 Tab标签不关闭&#xff0c;对应的页面就会被缓存&#x…...

C++STL剖析(四)—— stack和queue的概念和使用

文章目录1. stack的介绍2. stack的构造3. stack的使用&#x1f351; push&#x1f351; top&#x1f351; pop&#x1f351; empty&#x1f351; size&#x1f351; swap&#x1f351; emplace4. queue的介绍5. queue的构造6. queue的使用&#x1f351; push&#x1f351; size…...

流浪地球 | 建筑人是如何看待小破球里的黑科技的?

大家好&#xff0c;这里是建模助手。 想问问大家今年贺岁档&#xff0c;都跟上没有&#xff0c;今天请允许我蹭一下热点表达一下作为一个科幻迷的爱国之情。 抛开大刘的想象力、各种硬核科技&以及大国情怀不提&#xff0c;破球2中的传承还是让小编很受感动&#xff0c;无…...

软中断在bottom-half中调用

https://www.bilibili.com/read/cv20785285/简介软中断可以在两个位置得到机会执行&#xff1a;硬中断返回前 irq_exit中断下半部 Bottom-half Enable后情景分析情景1spin_unlock_bh__raw_spin_unlock_bh__local_bh_enable_ip 打开Bottom-half&#xff0c;并让softirq有机会…...

GEE遥感云大数据在林业中的应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…...

Apollo架构篇 - 客户端架构

前言 本文基于 Apollo 1.8.0 版本展开分析。 客户端 使用 Apollo 支持 API 方式和 Spring 整合两种方式。 API 方式 API 方式是最简单、高效使用使用 Apollo 配置的方式&#xff0c;不依赖 Spring 框架即可使用。 获取命名空间的配置 // 1、获取默认的命名空间的配置 C…...

JVM调优最全面的成长 :参数详解+垃圾算法+示例展示+类文件到源码+面试问题

目录1.优秀的Java开发者1.1 什么是Java&#xff1f;1.2 编程语言1.3 计算机[硬件]能够懂的语言1.3.1 计算机发展史1.3.2 计算机体系结构1.3.3 计算机处理数据过程1.3.4 机器语言1.3.5 不同厂商的CPU1.3.6 操作系统1.3.7 汇编语言1.3.8 高级语言1.3.9 编译型和解释型1.3.9.1 编译…...

linux驱动常用函数

以下为一些常见用户态函数在内核中的替代&#xff0c;包括头文件和函数声明&#xff1a;1、动态申请内存&#xff1a;linux/vmalloc.hvoid *vmalloc(unsigned long size);void vfree(const void *addr);2、字符串操作&#xff1a;linux/string.hvoid * memset(void *,int,__ker…...

Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask

文章目录一、数据对象DataObject二、租户 Tenant三、接收任务 ReceiveTask案例一、数据对象DataObject DataObject可以⽤来定义⼀些流程的全局属性。 绘制流程图&#xff0c;并配置数据对象&#xff08;不需要选择任意节点&#xff09; 2. 编码与测试 /*** 部署流程*/ Test…...

C语言实现五子棋(n子棋)

五子棋的历史背景&#xff1a; 五子棋起源于中国&#xff0c;是全国智力运动会竞技项目之一&#xff0c;是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子&#xff0c;下在棋盘直线与横线的交叉点上&#xff0c;先形成五子连珠者获胜。五子棋容易上手&#xff0c…...

OpenStack云平台搭建(2) | 安装Keystone

目录 1、登录数据库配置 2、数据库导入Keystone表 3、配置http服务 4、创建域、用户 5、创建脚本 Keystone&#xff08;OpenStack Identity Service&#xff09;是 OpenStack 框架中负责管理身份验证、服务访问规则和服务令牌功能的组件。下面我们进行Keystone的安装部署 1…...

基于javaFX的固定资产管理系统

1. 总体设计 本系统分为登录模块、资产管理模块、资产登记模块和信息展示模块共四个模块。 登录模块的主要功能是&#xff1a;管理员通过登录模块登录本系统&#xff1b; 资产管理模块的主要功能有&#xff1a;修改、删除系统中的固定资产&#xff1b; 在资产登记模块中&#…...

板子登录和挂载问题记录

ubuntu登录板子问题 ssh登录ssh 10.1.3.15&#xff0c;显示No route to host 则尝试在板子上ping 本机ip 试一下 挂载 本地机器vim /etc/export编辑此内容并保存 /exports_0209/tda4_build *(rw,no_root_squash,nohide,insecure,no_subtree_check,async)1.挂载nfs方法 mou…...

二、Linux文件 - Open函数讲解实战

目录 1.Open函数讲解 2.open函数实战 2.1 man 1 ls 查询Shell命令 2.2 man 2 open 查看系统调用函数 2.3项目实战 2.3.1O_RDWR和O_CREAT 2.3.2O_APPEND的用法 1.Open函数讲解 高频使用的Linux系统调用&#xff1a;open write read close Linux自带的工具&#xf…...

源码分析Spring解决循环依赖的过程

循环依赖是之前很爱问的一个面试题&#xff0c;最近不咋问了&#xff0c;但是梳理Spring解决循环依赖的源码&#xff0c;会让我们对Spring创建bean的流程有一个清晰的认识&#xff0c;有必要搞一搞。开始搞之前&#xff0c;先参考了这个老哥写的文章&#xff0c;对Spring处理循…...

LabVIEW中加载.NET 2.0,3.0和3.5程序集

LabVIEW中加载.NET 2.0,3.0和3.5程序集已使用.NETFramework 2.0,3.0或3.5创建了.NET程序集&#xff0c;但是当尝试在构造函数节点中加载这些程序集时&#xff0c;却收到LabVIEW消息显示: 所选文件不是.NET程序集&#xff0c;所属类型库或自动化可执行文件。所以想确认是否可以在…...

Fluent Python 笔记 第 2 章 序列构成的数组

2.1 内置类型序列概览 容器序列&#xff08;能存放不同类型的数据&#xff09;&#xff1a;(作者分的类) list、tuple 和 collections.deque扁平序列&#xff08;只能容纳一种类型&#xff09;&#xff1a; str、byes、bytearray、memoryview 和 array.array可变&#xff1a…...

句子扩充法

人&#xff0c;物&#xff0c;时&#xff0c;地&#xff0c;事 什么人和什么物在什么时间什么地点发生了什么事。 思维导图&#xff1a;以人为中心&#xff0c;人具有客观能动性。 例如&#xff1a;秋燕南飞。 扩展为&#xff1a; 盘旋在洞庭湖上方的大雁渐渐消失了。“它们都…...

Java并发编程概述

在学习并发编程之前&#xff0c;我们需要稍微回顾以下线程相关知识&#xff1a;线程基本概念程序&#xff1a;静态的代码&#xff0c;存储在硬盘中进程&#xff1a;运行中的程序&#xff0c;被加载在内存中&#xff0c;是操作系统分配内存的基本单位线程&#xff1a;是cpu执行的…...

Java常见数据结构的排序与遍历(包括数组,List,Map)

数组遍历与排序 数组定义 //定义 int a[] new int[5]int[] a new int[5];//带初始值定义 int b[] {1,2,3,4,5};赋值 //定义时赋值 int b[] {1,2,3,4,5};//引用赋值 a[6] 1 a[9] 9 //未赋值为空取值 //通过下表取值&#xff0c;从0开始 b[1] 1 b[2] 2遍历 Test p…...

数据结构|绪论

&#x1f525;Go for it!&#x1f525; &#x1f4dd;个人主页&#xff1a;按键难防 &#x1f4eb; 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f4d6;系列专栏&#xff1a;数据结构与算法 &#x1f52…...

内网渗透(十二)之内网信息收集-内网端口扫描和发现

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

RabbitMq相关面试题

文章目录消息队列有没有接触过&#xff1f; 简单介绍一下&#xff1f;消息中间件模式分类 &#xff1f;使用MQ有什么好处&#xff1f;MQ如何选型 &#xff1f;你们项目中用到过 MQ 吗&#xff1f;谈谈你对 MQ 的理解&#xff1f;MQ消费者消费消息的顺序一致性问题&#xff1f;R…...

树莓派开机自启动Python脚本或者应用程序

树莓派开机自启动Python脚本或者应用程序前言一、对于Python脚本的自启动方法1、打开etc/rc.local文件2、编辑输入需要启动的指令3、重启树莓派验证二、对于需要读写配置文件的应用程序的自启前言 在树莓派上写了一些Python脚本&#xff0c;还有一个java 的jar包想要在树莓派上…...

全国青少年编程等级考试scratch四级真题2022年9月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手1、运行下列程序&#xff0c;说法正确的是&#xff1f;&#xff08; &#xff09;A.列表…...

NodeJS与npm版本不一致时降级npm的方法

首先查看 Node.js 与 npm 版本对应关系&#xff1a;Node.js与npm版本查看。 安装 cnpm&#xff1a; npm install -g cnpm 查看一下 npm 和 cnpm 的镜像&#xff1a; npm config get registry cnpm config get registry 2 如果不是 https://registry.npm.taobao.org/ 的话就修…...

《C++ Primer Plus》第16章:string类和标准模板库(8)

关联容器 关联容器&#xff08;associative container&#xff09;是对容器概念的另一个改进。关联容器将值与键关联在一起&#xff0c;并使用键来查找值。例如&#xff0c;值可以表示雇员信息&#xff08;如姓名、地址、办公室号码、家庭电话和工作电话、健康计划等&#xff…...

Linux安装达梦8数据库

Linux安装达梦8数据库 服务器系统&#xff1a;centos7 数据库版本&#xff1a;达梦8 先获取安装包&#xff1a;https://eco.dameng.com/download/?_blank 选择相应版本下载,下载完解压之后会得到一个iso文件&#xff0c;把他上传到服务器上&#xff0c;建议上传到/opt目录下…...

大连网站建设网站/线上销售的方法和技巧

全景视频是一种利用360 度全景图象建立虚拟环境的新方法。全景图象是通过将普通照相机拍照到的边界部分重叠的图象进行拼接而创建的。可以利用图象重叠部分对应像素的相似性, 通过采用一种行之有效的拼接算法, 使得到的图象无缝平滑。 附图是2000年8月21日慕尼黑市区的骑行路线…...

长治网站建设电话/软文广告范文

地下城礼包不断&#xff0c;才在商城上架3款(777、2999、11800)礼包后&#xff0c;体验服8.08又有新礼包“空域之怒海霸主”(19900)&#xff0c;上一篇已介绍过&#xff0c;主要是2个新道具的出现&#xff0c;宠物BUFF技能宝珠和装扮跨界石&#xff0c;而一次更新出1个礼包太少…...

网站建设氺金手指排名15/郑州seo排名哪有

为什么80%的码农都做不了架构师&#xff1f;>>> 关于nginx upstream的几种配置方式 第一种&#xff1a;轮询 upstream test{ server 192.168.0.1:3000; server 192.168.0.1:3001;} 第二种&#xff1a;权重 upstream test{ server 192.168.0.1 weight2; …...

自己做的网站可以买东西吗/班级优化大师怎么下载

简单工厂&#xff0c;抽象工厂&#xff0c;工厂方法的区别&#xff0c;UML类图&#xff0c;应用场景类和类的关系以及关系的强弱耦合度由弱到强的是关联关系&#xff1a;聚合关系&#xff1a;组合(Composition) 关系&#xff1a;类关系的总结类图UML说明-- -- -- -- -- -- ---&…...

两峡一峰旅游开发公司官方网站/网络营销是什么工作主要干啥

目录 1、队列的定义 2、队列常见的基本操作 1、队列的定义 队列&#xff08;Queue&#xff09;简称队&#xff0c;也是一种操作受限的线性表&#xff0c;只允许在表的一端进行插入&#xff0c;而在表的另一端进行删除。向队列中插入元素称为入队或进队&#xff1b;删除元素称…...

网站建设需要的服务器/腾讯3大外包公司

一二三四五六七八九十百千万亿兆吉太拍艾分厘毫微零壹贰叁肆伍陆柒捌玖拾佰仟『』〖〗【】&#xff5b;&#xff5d;≈≡≠&#xff1d;≤≥&#xff1c;&#xff1e;≮≯∷&#xff0b;&#xff0d;&#xff0f;∫∮∝∞∧∨∑∏∪∩∈∵∴⊥∥∠⌒⊙≌∽√′″&#xff04;&a…...