题目描述:
有一个长度为n的字符串P,我们可以通过P构造出一个无限长度的字符串S,其中S[i]=P[i%n]。给定一个字符串S,求可以通过上述方法构造出S的最短字符串P。
思想:
- 遍历每一种可能的子串(子串长度由小到大)
- 将子串重复多次进行拼接(取整和取余)
- 判断和原字符串是否相等(存在就是最小的符合要求的子串)
public class test1 {
public static void constructStr(String str) {
//从头开始,遍历每一种可能的子串
for(int i = 1; i < str.length(); i++) {
//获得长度为i的子串
String subStr = str.substring(0, i);
StringBuffer temp = new StringBuffer("");
//子串重复多次,存储到temp中
for(int j = 0; j < str.length() / i; j++) {
temp.append(subStr);
}
//处理无法整除的情况
temp.append(str.substring(0, str.length() % i));
//如果相等,证明就是最短的(因为长度逐渐增大的,所以出现就是最小的)
if(temp.toString().equals(str)) {
System.out.println(subStr);
break;
}
}
}
public static void main(String[] args) {
String str = "abcabcabc";
constructStr(str);
}
}
//打印
abc