输入包括一个字符串s,字符串长度length(1 ≤ length ≤ 50),s中每个字符都是小写字母.
输出一个字符串,即含有连续两个s作为子串的最短字符串。
abracadabra
abracadabracadabra
import java.util.Arrays; import java.util.Scanner; public class Main{ public static String fun(String str){ char[] chs = str.toCharArray(); int[] next = new int[chs.length + 1]; next[0] = -1; next[1] = 0; int cn = 0; int i = 2; while(i < next.length){ if(chs[i - 1] == chs[cn]){ next[i++] = ++cn; }else{ if(cn > 0){ cn = next[cn]; }else{ next[i++] = 0; } } } int ansLen = chs.length - next[i - 1]; char[] ans = new char[ansLen]; for(int j = next[i - 1]; j < chs.length; j++){ ans[j - next[i - 1]] = chs[j]; } return str + new String(ans); } public static void main(String[] args){ Scanner sc = new Scanner(System.in); String str = str = sc.next(); System.out.println(fun(str)); } }