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

代码随想录刷题——字符串篇(七)

459.重复的子字符串

移动匹配法:

bool repeatedSubstringPattern(string s) {# 组成新串string t=s+s;# 去除首尾字符t.erase(t.begin());t.erase(t.end()-1);# 判断中间是否有与原字符串相等的子串if(t.find(s)!=npos) return true;return false;}

KMP法:

# 获取next数组
void getNext(int* next,const string& s){next[0]=0;int i=0;for(int j=1;j<s.size();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.size());getNext(&next[0], s);int n=s.size();# 如果next数组最后一位不为0则存在最长相等前后缀,再判断最长重复子串的长度# 是否可以被字符串长度整除即可if(next[n-1]!=0 && n%(n-next[n-1])==0) return true;return false;}

其他:

(1)移动匹配法非常巧妙,相当于把一个字符串写两遍去掉首尾字符(因为一个字符串如果自循环构成长度一定大于等于2),再查找原字符串是否仍存在,如果存在则一定自循环,举个例子(空格是为了好观察):

                s="abc abc abc"

                t=s+s="abc abc abc abc abc abc"

                去掉首位字符后=“bc abc abc abc abc ab"此时由于自循环的缘故,中间部分一定会出现与原始字符串相同的子串,充分必要性的数学证明网站中有

(2)字符串相关:

                a.重载了+运算符

                b. t.find(s)!=string::npos 判断写法,string作用域下的npos

(3)KMP法则是利用最长相等前后缀来找最小重复子串,一个示意图就很清晰:

http://www.xdnf.cn/news/1325899.html

相关文章:

  • ChatBI驱动的智能商业决策:奥威BI的深度实践
  • Java多线程:线程创建、安全、同步与线程池
  • 常见的 Bash 命令及简单脚本
  • C语言实战:从零开始编写一个通用配置文件解析器
  • SpringAI——向量存储(vector store)
  • 电子电气架构 --- 软件项目成本估算
  • UE5 PCG 笔记(一)
  • 零基础数据结构与算法——第八章 算法面试准备-数组/字符串/链表/树/动态规划/回溯
  • JVM之Java内存区域与内存溢出异常
  • Python + 淘宝 API 开发:自动化采集商品数据的完整流程​
  • 8.19作业
  • 星图云开发者平台新功能速递 | 微服务管理器:无缝整合异构服务,释放云原生开发潜能
  • 部署tomcat应用时注意事项
  • 数据迁移:如何从MySQL数据库高效迁移到Neo4j图形数据库
  • 高性能AI推理与工作站GPU:DigitalOcean L40s、RTX 6000 Ada与A6000全解析
  • UniApp 微信小程序之间跳转指南
  • Leetcode 343. 整数拆分 动态规划
  • 【最新版】CRMEB Pro版v3.4系统源码全开源+PC端+uniapp前端+搭建教程
  • LLM 中 token 简介与 bert 实操解读
  • 大语言模型中的归一化实现解析
  • Vim笔记:缩进
  • AiPPT怎么样?好用吗?
  • Qt密码生成器项目开发教程 - 安全可靠的随机密码生成工具
  • Orbbec---setBoolProperty 快捷配置设备行为
  • Go高效复用对象:sync.Pool详解
  • JavaScript 性能优化:new Map vs Array.find() 查找速度深度对比
  • openldap安装 -添加条目
  • 【什么是非晶合金?非晶电机有什么优点?】
  • RecSys:粗排模型和精排特征体系
  • 图解快速排序C语言实现