题意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。
思路:KMP中的next数组的运用,
AC代码
import java.io.*;
import java.math.*;
import java.math.BigInteger;
import java.util.*;
public class Main{
static int prefix[];
public static void main(String[] args) {
Scanner sc=new Scanner (System.in);
for(int t=sc.nextInt();t>0;t--) {
char pattern[]=sc.next().toCharArray();
int n=pattern.length;
prefix=new int [n];
show(pattern,prefix,n);
int len=n-prefix[n-1];//循环节的长度
if(n%len==0&&n/len>=2)System.out.println(0);
else System.out.println(len-prefix[n-1]%len);
}
}
private static void show(char[] pattern, int[] prefix, int n) {
prefix[0] = 0;
int len = 0;
int i = 1;
while(i<n) {
if(pattern[i] == pattern[len]) {
len++;
prefix[i]=len;
i++;
}else {
if(len>0)len=prefix[len-1];
else {
prefix[i]=0;
i++;
}
}
}
}
}