E : 子串循环问题 (Ver. I)

简介: 这篇文章介绍了一种利用KMP算法解决子串循环问题的C++程序,旨在找出给定字符串需要添加的最少字符数,以使其成为某个子串的循环构成。

E : 子串循环问题 (Ver. I)

Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 18     Solved: 12

Description

给定一个字符串,求需要添加至少几个字符到字符串末尾才能使得整个字符串由某一个不为本身的子串循环构成? 如“abca”,添加“bc”后构成“abcabc”,其由子串“abc”循环构成;也可以添加“abca”后构成“abcaabca”,其由子串“abca”循环构成,相比之下“bc”只有2个字符,添加的字符量最少。

Input

第一行包括一个整数T(1 <= T <= 100),代表测试组数

每组测试数据包括一行字符串,其长度范围为 [3, 10^4]

Output

对于每组测试数据

输出一个整数N,代表添加的最小字符数量

Sample Input

4
aaa
abca
abcdefg
abcabcabca

Sample Output

0
2
7
2

ac代码如下:
大致思路是:利用KMP算法中的其中一个核心函数Get_next(string a)来算next[a.size()]多少,然后分重叠串和非重叠串进行分类计算

#include<iostream>
using namespace std;

int Get_next(string a)
{
    int len=a.size();
    int i=0,k=-1;
    int *next=new int[len+1];
    next[0]=-1;
    while(i<len)
    {
        if(k==-1||a[i]==a[k])
        {
            i++,k++;
            next[i]=k;
        }
        else k=next[k];
    }
    if(next[len]*2>=len)
    {
        if(len%(len-next[len])==0)return 0;
        else return (len-next[len])-len%(len-next[len]);
    }
    else return len-next[len]*2;

}
int main()
{
    string a;
    int n;
    cin>>n;
    while(n--)
    {
        cin>>a;
        cout<<Get_next(a)<<endl;
    }
    return 0;
}
相关文章
|
IDE Java 应用服务中间件
Java“ClassNotFoundException”解决
Java中的“ClassNotFoundException”表示JVM找不到指定的类。解决方法包括:确保类路径正确、检查依赖是否完整、确认类名无误、清理和重新构建项目等。
2652 0
|
机器学习/深度学习 人工智能 自然语言处理
当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界
本文介绍了阿里云机器学习PAI团队开发的名为ARTIST的中文文图生成模型,该模型融合了知识图谱信息,能够生成更加符合常识的图像。ARTIST基于Transformer架构,将文图生成任务分为图像矢量量化和文本引导的图像序列生成两个阶段。在第一阶段,模型使用VQGAN对图像进行矢量量化;在第二阶段,通过GPT模型并结合知识图谱中的实体知识来生成图像序列。在MUGE中文文图生成评测基准上,ARTIST表现出色,其生成效果优于其他模型。此外,EasyNLP框架提供了简单易用的接口,用户可以基于公开的Checkpoint进行少量领域相关的微调,实现各种艺术创作。
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
177 2
|
Ubuntu 网络安全 数据安全/隐私保护
使用WinSCP工具,将windows文件传输到虚拟机Ubuntu系统
使用WinSCP工具,将windows文件传输到虚拟机Ubuntu系统
2553 4
|
算法 C++
A : DS串应用–KMP算法
这篇文章提供了KMP算法的C++实现,包括计算模式串的next数组和在主串中查找模式串位置的函数,用于演示KMP算法的基本应用。
|
机器学习/深度学习 存储 Shell
Google Colab免费GPU大揭晓:超详细使用攻略
Google Colab免费GPU大揭晓:超详细使用攻略
|
JavaScript 测试技术
Vue3 响应式原理之scheduler、stop
这里引用一下 Vue 官方的经典测试用例来测试 scheduler 功能
415 0
Vue3 响应式原理之scheduler、stop
|
分布式计算 Java Hadoop
HBase 完全分布式搭建_1 | 学习笔记
快速学习 HBase 完全分布式搭建_1
263 0
|
SQL Oracle 关系型数据库