#CF1950E. Nearly Shortest Repeating Substring

    ID: 6889 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>暴力模拟数论字符串CodeforcesCodeforces Round 937(Div4)Div4ECF1950E1500

Nearly Shortest Repeating Substring

题目描述

给定一个长度为 nn 的字符串 ss,该字符串仅由小写拉丁字母组成。请你找到最短字符串 kk 的长度,使得可以将若干个(可能只需一个)kk 拼接起来,得到一个与 ss 长度相同的新字符串 cc,并且 ccss 至多只有一个字符不同。

更正式地说,要求找到最短的 kk,使得存在正整数 xx,满足 c=k++kx 次c = \underbrace{k + \cdots + k}_{x\text{ 次}},且 sscc 长度相同,并且 cisic_i \neq s_i 的位置最多只有一个(即最多有 0011 个这样的下标 ii)。

输入格式

第一行包含一个整数 tt1t1031 \leq t \leq 10^3),表示测试用例的数量。

每个测试用例的第一行包含一个整数 nn1n21051 \leq n \leq 2\cdot10^5),表示字符串 ss 的长度。

每个测试用例的第二行包含一个仅由小写拉丁字母组成的字符串 ss

所有测试用例中 nn 的总和不超过 21052\cdot10^5

输出格式

对于每个测试用例,输出满足题意的最短字符串 kk 的长度。

样例

5
4
abaa
4
abba
13
slavicgslavic
8
hshahaha
20
stormflamestornflame
1
4
13
2
10

样例说明

在第一个测试用例中,可以选择 k=ak = \texttt{a},此时 k+k+k+k=aaaak+k+k+k = \texttt{aaaa},与 ss 只在第二个位置不同。

在第二个测试用例中,不能选择长度为 1122kk。可以选择 k=abbak = \texttt{abba},此时 kk 等于 ss

由 ChatGPT 4.1 翻译

来源

Codeforces 1950E,英文题名 Nearly Shortest Repeating Substring。