D : DS串应用—最长重复子串

简介: 这篇文章提供了一种C++程序,用于通过KMP算法计算给定字符串的最长不重叠重复子串的长度,如果没有重复子串则输出-1。

D : DS串应用—最长重复子串

Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 38     Solved: 16

Description

求串的最长重复子串长度(子串不重叠)。例如:abcaefabcabc的最长重复子串是串abca,长度为4。

Input

测试次数t

t个测试串

Output

对每个测试串,输出最长重复子串长度,若没有重复子串,输出-1.

Sample Input

3
abcaefabcabc
szu0123szu
szuabcefg

Sample Output

4
3
-1

注:这里有个地方得注意,就是他最大重复子串是不重叠的。方法利用就是KMP中的一个计算next[]数组的函数的计算前后缀重复度的特性。
分两种情况判定:不重叠:k*2<=i和重叠:i/(i-k)>=2,第一个很容易理解,第二个,i/(i-k)可以求重复次数是多少
如果超过2,比如是5那么就取两个重复串,所以就有了这个式子:(i-k)单串长度 乘重复次数/2这样取的子串长度就肯定不重叠
ac代码如下:

#include<iostream>
using namespace std;
int Get_next(string a)
{
    int i=0,k=-1;
    int len=a.length(),maxn=0;
    int *nextt=new int[a.length()+1];
    nextt[0]=-1;
    while(i<len)
    {
        if(k==-1||a[i]==a[k])
        {
            i++,k++;
            nextt[i]=k;
            if(k*2<=i)maxn=max(maxn,k);
            if(i/(i-k)>=2)maxn=max(maxn,(i-k)*(i/(i-k)/2));
        }
        else k=nextt[k];
    }
    return maxn;
}
int get_maxnum(string a)
{
    int len=a.length(),maxn=0;
    for(int i=0;i<len;i++)
    {
        maxn=max(maxn,Get_next(a.substr(i,len)));
    }
    return maxn;
}
int main()
{
    string a;
    int n;
    cin>>n;
    while(n--)
    {
    cin>>a;
    int num=get_maxnum(a);
    if(!num)cout<<-1<<endl;
    else cout<<num<<endl;
    }
    return 0;
}
相关文章
|
存储 算法 C语言
串结构解析
串结构解析
|
2月前
|
算法 C++
B : DS串应用–串替换
这篇文章介绍了如何使用KMP算法在给定的主串中查找模式串的位置,并用替换串替换模式串的C++程序实现,仅考虑单次替换情况。
|
2月前
|
算法 C++
A : DS串应用–KMP算法
这篇文章提供了KMP算法的C++实现,包括计算模式串的next数组和在主串中查找模式串位置的函数,用于演示KMP算法的基本应用。
|
5月前
leetcode-1784:检查二进制字符串字段
leetcode-1784:检查二进制字符串字段
31 0
|
5月前
|
开发框架 .NET C#
C# | [二进制字符串] 与 [字节数组] 互相转换,一行代码就搞定! - CodePlus系列
开发中有时需要将二进制数据转换为字符串或相反。虽然.NET提供了一些用于二进制数据操作的类库,但是它们的使用有时候会比较繁琐。STTech.CodePlus是一个.NET扩展库,它提供了很多实用的扩展方法,可以帮助我们更方便地进行二进制数据操作。 在本文中,我们将介绍如何使用STTech.CodePlus扩展库实现二进制字符串和字节数组的快速互相转换。
206 0
|
运维 监控 供应链
DS200DMCBG1AKG DS215DMCBG1AZZ03A
DS200DMCBG1AKG DS215DMCBG1AZZ03A
45 0
|
C语言
PE格式:实现VA与FOA之间的转换
PE结构中的地址互转,这次再来系统的复习一下关于PE结构中各种地址的转换方式,最终通过编程来实现自动解析计算,最后将这个功能集成到我的迷你解析器中,本章中使用的工具是上次讲解PE结构文章中制作的CMD迷你结构解析器,如果不知道参数的基本使用请看前一篇。
158 0
PE格式:实现VA与FOA之间的转换
|
Python
盘点一个`07Apr2022`格式日期转换的基础题目
盘点一个`07Apr2022`格式日期转换的基础题目
211 0
盘点一个`07Apr2022`格式日期转换的基础题目
|
存储 关系型数据库 MySQL
【mysql】二进制字符串类型
【mysql】二进制字符串类型
1342 0
【mysql】二进制字符串类型