最字头之三:最长重复子串

数据结构——名词解释(四) 第四章 串 1、串的定义:是由零个或多个字符组成的有限序列。一般记为S=‘Abcdefg……’这样的形式。 S是串名,用单引号括起来的字符序列是串的值。 字符序列,可以用数字、字母、标点符号或其他字符。 串中字符的个数n称为串的长度。 当n=0时,该串称为空串。 子串:串中任意多个连续的字符组成的子序列。 主串:包含子串的串。 子串在主串中的位置,以子串的第一个字符在主串中的位置来表示。 当两个串的长度相当,且每一个对应位置的字符都相等时,称这两个串是相等的。 由一个或多个空格组成的串称为空格串,空格串不 阅读详情

在之前的博文已经有记录,只记录代码。

最简单的算法:

#include <iostream>
#include <string>
using namespace std;
int length(char* p,char* q){
   int len = 1;
   //if(*p == *q) len++;
   while(*p++ == *q++ && *p && *q)//后面的q和p已经经前面的++计算了
   len++;
   return len;
}
int main(){
   int index = 0;
   int maxlen = 0;
   string s = "caixiaorangdianzancaixiaorang";
   for(int i = 0; i < s.size(); i++){
      for(int j = i + 1; j < s.size(); j++){
	      if(s[i] == s[j]){
		     int len = length(&s[i],&s[j]);
			 if(len > maxlen){
			   maxlen = len;
			   index = i;
			 }
		  }
	  }
   }
   for(int i = index; i < index + maxlen; i++)
   cout << s[i];
   cout << endl;
   return 0;
}

后缀数组方法:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int comlen(string s1,string s2){
   int i = 0;
   int len = 0;
   while(s1[i] == s2[i]){
      len ++;
	  i++;
   }
   return len;
}
int main(){
   int index = 0;
   int maxlen = 0;
   string s = "caixiaorangabcdcaixiaorang";
   string suf[30];
   for(int i = s.size()-1; i >= 0; i--){
      suf[i] = s.substr(i,s.size()-i);
   }
   sort(suf,suf+s.size());
   //for(int i = 0; i < suf.size(); i++)
   //cout << suf[i] << endl;
   for(int i = 0; i < s.size(); i++){
      int tmp = comlen(suf[i],suf[i+1]);
	  if(tmp > maxlen){
	    maxlen = tmp;
		index = i;
	  }
   }
   cout << suf[index] << endl;
   return 0;
}

后缀树法(Trie树):

略

字符串-最长重复子串 最长重复子串题目描述code 题目描述 一个长度为10000的字符串,写一个算法,找出最长的重复子串,如abczzacbca,结果是bc Trie 树典型应用。-- 后缀树 code package leetcode; /** * 一个长度为10000的字符串,写一个算法,找出最长的重复子串,如abczzacbca,结果是bc */ public class LongestCommonSub... 阅读详情

相关推荐

数据结构第四章——串(详细总结)

知识框架: 4.2 串的定义和实现 字符串简称串,计算机上非数值处理的对象基本都是字符串数据。 常见的信息检索系统 (如搜索引擎 )、文本编辑程序(如 Word 、问答系统、自然语言翻译系统等,都是以字符串数据作为处理对象的。 4.1.1 串的定义 串(string)是由菱格或多个字符组成的有限序列。 一般记为: S=‘a1a2···an’ (n>=0) S为串名,单引号括起来的字符序列是串的值。 ai可以是字母、数字或其他字符。 串中字符的个数n称为串的长度。 n=0的串称为空串(

疯子书生的博客 3391

寻找一个字符串的重复子串 后缀数组

什么是后缀数组 令字符串 S=S[1]S[2]...S[n]S=S[1]S[2]...S[n]{\displaystyle S=S[1]S[2]...S[n]} , S[i,j]S[i,j]{\displaystyle S[i,j]} 表示SS {\displaystyle S} 的子字符串,下标从ii {\displaystyle i} 到 jj{\displaystyle j} 。 SS{...

楼上小宇_home 6128

数据结构——串

串(String)是由零个或多个字符组成的有序数列.一般记为 S=′a1,a2,...,an′S='a_1,a_2,...,a_n'S=′a1​,a2​,...,an′​,其中aia_iai​可以是字母,数字或其它字符. 子串串中任意个连续的字符组成的子序列称为该串的子串,包含子串的串为主串. ...

MercuryG的博客 4923

别再死磕Excel了!用Vensim PLE免费版,30分钟搞定你的第一个系统动力学模型

本文介绍如何使用Vensim PLE免费版在30分钟内构建第一个系统动力学模型,无需编程或数学基础。通过个人储蓄增长案例,详细讲解因果回路图绘制、存量流量图创建及方程编写,帮助读者掌握动态系统建模与仿真技巧,适用于理财、项目管理等多种场景。

weixin_29045001的博客 329

Allegro规则管理器实战:5步搞定Xnet等长组设置(含Relative Propagation Delay配置)

本文详细介绍了在Cadence Allegro规则管理器中,通过5个实战步骤高效设置Xnet等长组的方法。核心内容包括创建Xnet属性、定义引脚对、建立匹配组,并重点讲解了Relative Propagation Delay规则的配置与应用,帮助PCB设计师确保高速信号时序对齐,提升系统稳定性与性能。

weixin_29193259的博客 518

{草履虫都能看懂的} 数据结构串的PM、next和nextval数组的求法

数据结构pm数组, next 数组和nextval数组的求法

qq1803291168 5037

车辆横向控制MPC实战:从‘老王模型’到CasADi求解的保姆级避坑指南

本文详细解析了车辆横向控制MPC的实战应用,从经典动力学模型选择到CasADi求解器的优化配置,提供了一套完整的避坑指南。重点介绍了车辆动力学模型的验证要点、CasADi环境的高效配置技巧以及MPC问题建模的核心要素,帮助开发者快速实现稳健的横向控制方案。

weixin_42524499的博客 346

KMP 算法

图解 KMP 算法

m0_65376043的博客 639

汇川Easy 301 和MCGS进行Modbus RTU通讯(485)浮点数读取和写入

4DF0001对应寄存器D0,4DF0003对应寄存器D2。注意:要选com2口,com1口是232通讯。

qq_61916672的博客 2902

双模音频解码器设计:USB+蓝牙LDAC平衡输出方案

音频解码器是数字音频系统中实现数模转换的核心组件,其性能直接决定音质保真度与系统延迟。基于高集成SoC的解码方案通过统一时钟域与片内DSP处理,有效抑制Jitter并简化硬件拓扑;结合全平衡模拟输出架构,可显著提升共模抑制比(CMRR)与信噪比(SNR)。该技术路径广泛应用于便携式Hi-Res音频设备、USB-C小尾巴DAC及蓝牙高解析耳机放大器等场景。本文围绕ES9038Q2M双模SoC展开,详解其在LDAC协议支持、UAC2.0兼容性及平衡电流型DAC输出方面的工程实现,为高性能、可量产音频硬件开发提供

weixin_42613018的博客 388

最字头之四:最长不重复字串

文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。 --- 注:代码为本人参考作者实现的。并非作者的代码,如果有错误请见谅! 题:从一个字符串中找到一个连续子串,该子串中任何两个字符不能相同,求子串的最大长度并输出一条最长不重复子串。 本节从最直接的方法逐步优化,渐进探索了四种实现

1ouis的专栏 1148

CATIA V6二次开发——如何利用CaptureToFile截屏

CaptureToFile 今天给大家分享一个很有趣的功能,如何利用CATIA自带的功能输出模型展示图? 先上方法: 方法本身并不难,只需要赋予格式及输出路径即可完成该功能。结果如下: 看到这样一张图片不禁让我陷入了沉思,怎么会这么丑???? 那么如何让这个简单的功能变得有趣,图片变得好看点呢? 第一步:背景换色 第二步:隐藏结构树 ...

WorkMan的博客 2982

最字头之二:最长公共字串

除代码外,其他文字部分均为直接转载。代码为参考。 文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。 --- 这个LCS跟前面说的最长公共子序列的LCS不一样,不过也算是LCS的一个变体,在LCS中,子序列是不必要求连续的,而子串则是“连续”的。即: 题:给定两个字符串X,Y,求二

1ouis的专栏 1003

基于FPGA的车道线检测系统设计

本文设计了一种基于FPGA的车道线检测系统,采用Altera Cyclone IV EP4CE10F17C8作为主控芯片,结合OV7725摄像头和LCD显示屏实现实时车道线检测。系统通过硬件流水线处理架构,依次完成图像采集、灰度转换、中值滤波、Sobel边缘检测和Hough变换直线识别等功能模块。所有模块均采用Verilog HDL实现,充分利用FPGA的并行处理能力,显著提升了系统响应速度。测试结果表明,该系统能够有效检测道路车道线,满足实时性要求,为ADAS系统提供了一种高效的硬件解决方案。

huanghm88的专栏 121

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构复习 -- 字符串

串 知识框架 **串的基本操作** StrAssion(&T,chars) ; 赋值操作,将串 T 赋值为 chars 。 StrCompare(S,T) ;比较操作。 Strlength(S) ; 求串的长度。 Concat(&T,S1,S2) : 串连接。用T返回由S1和S2连接而成的新串。 类型声明 : typedef struct{ char data[MaxSize]; int length; //串长 } SqString; 1 生成串 void StrAs

森宝的博客 855

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【数据结构】串(三)—— KMP 算法

在串的朴素模式匹配算法中,每趟匹配失败都是模式后移一位再从头开始比较。为此本章介绍一种改进的模式匹配算法 —— KMP 算法。以下面主串的模式匹配为例 朴素模式匹配算法:朴素模式匹配,主串有回溯 KMP算法: 在保证指针 i 不回溯的前提下,当匹配失败时,让模式串向右移动最大的距离;KMP算法相较于朴素模式匹配算法的优势在于:在保证指针 i 不回溯的前提下,当匹配失败时,让模式串向右移动最大的距离.为此计算模式串向右移动的距离是极为重要的,一般使用 next 数组来存储相关距离值。要了解子串的结构,首先要

haoweixl的博客 1731

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【数据结构】第3章 串

串

nosteglic 1029

输入一串字符,输入头串与尾串,在该字符串里找出这段字符串

 #include #include #define MAX 1024 int head_flog = 0; int tail_flog = 0; char *tail(char *str, char *b) {     int num = 0;     int len_b;     char *temp = b;     len_b = strlen(b);   

the_lion_song的博客 515

【数据结构(初稿)】串的总结——基本知识要点汇总

串的基本知识要点汇总,包括串的相关概念、串的存储、串的模式匹配,next与nextval的求解等

bay_Tong桐小白的博客 2083

数据结构:串(String)【详解】

串 一、知识框架 二、考纲内容 字符串模式匹配 三、串的定义 串( string)是由零个或多个字符组成的有限序列,又名叫字符串。 一般记为: 其中,S是串名,单引号括起来的字符序列是串的值; ai 可以是字母、数字或其他字符;串中字符的个数n称为串的长度。 另外还有一些其它概念: 空串:n=0时的串称为空串。 空格串:是只包含空格的串。注意它与空串的区别,空格串是有内容有长度的,而且可以不止一个空格。 子串与主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。

UniqueUnit的博客 5万+

字符串前缀子串与后缀子串

若字符串为“abcde”,则删除字符串c即为"ab"+"de"那么"ab"即为字符串"abcde"的前缀子串,"de"即为字符串"abcde"的后缀子串。由此,我们可以得到,一个字符串删除一定连续字符后得到的新串,可以用该字符串的前缀子串和后缀子串拼接得到。仅以此为例,表述一种算法思维。 ...

鼎寒的博客 3493

java获取post请求头部字符串

尝试过很多方式,下面的方式最有效: 用获取数据流的方式,直接获取post过来的所有数据流 // 读取请求内容 BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8")); String line = null; StringBuilder sb = n...

weixin_30338481的博客 478

数据结构学习笔记(第四章:串)

第三章:栈和队列4.1 串的定义和实现串的定义串的实现1、定长顺序存储实现 4.1 串的定义和实现 串的定义 串(String)是由零个或多个字符组成的有限序列。一般记为 S=‘a1a2...an’S=‘a_1a_2...a_n’S=‘a1​a2​...an​’ 串中任意多个连续的字符组成的子序列称为该串的子串。当两个串的长度相等且每个对应位置的字符相等时,称这两个串是相等的。 需要注意的是,由一个或多个空格组成的串称为空格串(空格串不是空串) 串的逻辑结构和线性表类似,区别仅在于串的数据类型限定为字符集。

qq_44993579的博客 621

KMP算法

文章目录前缀,后缀,部分匹配值部分匹配值的使用**算法改进**当前的算法优化next数组计算代码书上的错误书上代码纠正按照从0开始计算的代码代码讲解KMP全部代码速成KMP,推荐一个视频。 kmp算法本身匹配的方法理解感觉不太难,最大的难点可能就是next数组的计算,不容易理解。匹配的原理就是,提前算出子串的一个next数组,这个next数组记录了子串中到当前位置的字符串的最长前后缀(前后部分的相同部分的最长长度),利用这个next表,当子串和主串比对的时候,如果不同,就会找next表,利用这个最长长度,计

本人hexo博客:www.boluoboluobo.top 843

数据结构(C语言版)---串

1、串:由零个或多个字符组成的有限序列,记作S='a1a2a3...an'(n>=0),其中,S为串名,单引号括起来的字符序列为串的值。 1)串中字符的个数n为串的长度,n=0时的串称为空串。 2)串相等:两个串的长度相等且每个对应位置的字符都相等。 3)空格串:由一个或多个空格组成的串,其长度为串中空格字符的个数。 2、串的存储结构 1)定长顺序存储 (1)截断:超过预定义长度...

xqy201212的博客 835
上一篇: 最字头之二:最长公共字串
下一篇: 最字头之四:最长不重复字串
louis9212
博客等级 码龄14年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值