前言
本题使用Java解答,如果需要Python版本的代码,请参考以下链接:
点我
题目描述
给定一个由若干整数组成的数组nums,请检查数组是否是由某个子数组重复循环拼接而成,请输出这个最小的子数组。
输入描述
第一行输入数组中元素个数n,1 <= n <= 100000
第二行输入数组的数字序列nums,以空格分割,0 <= nums[i] <= 10
输出描述
输出最小的子数组的数字序列,以空格分割;
备注
数组本身是其最大的子数组,循环1次可生成的自身
示例1:
输入
9
1 2 1 1 2 1 1 2 1
输出
1 2 1
说明
数组[1,2,1,1,2,1,1,2,1] 可由子数组[1,2,1]重复循环3次拼接而成
解题思路
longestPrefixSuffix数组
表示最长相同前后缀,它记录每个位置前后相同子串的长度。
初始条件下,前缀指针(prefix)为0,后缀指针(suffix)为1,然后进行循环:</