#L3740. 「LNOI2022」串

「LNOI2022」串

题目描述

为了让你更好地理解题面,给出若干关于字符串的定义:

  • 对于一个字符串 S=s1s2snS = s_1 s_2 \cdots s_n,定义其长度为 S=n|S| = n
  • 对于两个字符串 S=s1s2snS = s_1 s_2 \cdots s_nT=t1t2tmT = t_1 t_2 \cdots t_m,称 TTSS 的子串,若 m=0m = 0(即 TT 为空串)或者 1ijn\exists 1 \le i \le j \le nT=sisi+1sjT = s_i s_{i + 1} \cdots s_j
  • m=0m = 0 或上述判断条件中 ii 可以取到 11,则称 TTSS 的前缀;若 m=0m = 0 或上述判断条件中 jj 可以取到 nn,则称 TTSS 的后缀。

给定一个英文小写字母构成的字符串 SS,你需要找到一个尽可能长的字符串序列 (T0,T1,,Tl)(T_0, T_1, \ldots, T_l),满足:

  1. T0T_0SS 的子串;
  2. 1il\forall 1 \le i \le lTiTi1=1|T_i| - |T_{i - 1}| = 1
  3. 1il\forall 1 \le i \le l,存在 SS 的一个长度为 Ti+1|T_i| + 1 的子串 SiS'_i,使得 SiS'_i 的长度为 Ti1|T_{i - 1}| 的前缀为 Ti1T_{i - 1},长度为 Ti|T_i| 的后缀为 TiT_i

输出这样的字符串序列的长度的最大值(即 ll 的最大值)。


输入格式

本题有多组测试数据。输入的第一行为一个整数 TT,表示测试数据组数。对于每组测试数据,输入一行一个英文小写字母构成的字符串 SS


输出格式

对于每组测试数据输出一行一个整数,表示题目描述中字符串序列长度的最大值。


样例 1

输入

3
abcd
abab
a

输出

2
3
0

下文中使用符号 ϵ\epsilon 表示空串。

  • 对于第一组测试数据,可以找到如下字符串序列:$T_0 = \epsilon, T_1 = \texttt{b}, T_2 = \texttt{cd}$,其中 S1=ab,S2=bcdS'_1 = \texttt{ab}, S'_2 = \texttt{bcd}
  • 对于第二组测试数据,可以找到如下字符串序列:$T_0 = \epsilon, T_1 = \texttt{b}, T_2 = \texttt{ab}, T_3 = \texttt{bab}$,其中 $S'_1 = \texttt{ab}, S'_2 = \texttt{bab}, S'_3 = \texttt{abab}$。
  • 对于第三组测试数据,可以找到如下字符串序列:T0=ϵT_0 = \epsilon

样例 2

见附加文件中 string2.instring2.ans

该组样例中的字符串长度有一定梯度,你可以利用该组样例对程序进行检查。


样例 3

见附加文件中 string3.instring3.ans

该组样例满足特殊性质 A。


数据范围

S\sum |S| 表示测试点中所有测试数据的字符串长度和。

对于 100%100\% 的测试数据,T1T \geq 11S5×1051 \leq |S| \leq 5 \times 10^51S1.5×1061 \leq \sum |S| \leq 1.5 \times 10^6

| 测试点编号 | S|S| \leq | S\sum |S| \leq | 特殊性质 | |:----------:|:---------:|:-----------:|:--------:| | 1 ~ 2 | 30 | 150 | 无 | | 3 ~ 5 | 200 | 800 | 无 | | 6 ~ 8 | 1000 | 3000 | 无 | | 9 ~ 11 | 5×1055 \times 10^5 | 1.5×1061.5 \times 10^6 | A | | 12 ~ 15 | 6×1046 \times 10^4 | 3×1053 \times 10^5 | 无 | | 16 ~ 20 | 5×1055 \times 10^5 | 1.5×1061.5 \times 10^6 | 无 |

特殊性质 A:字符串中的每个字符在小写字母中独立均匀随机生成。

提示

本题输入输出量较大,请使用较为快速的输入输出方式。

例如,若你的代码使用了 cincout 作为输入输出方式,你可以选择在代码的输入输出重定向语句(freopen 语句、fopen 语句等)之后加入以下语句加速输入输出速度。

ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);

加入该语句后不建议同时使用 cincout 和其他输入输出方式。