【拼多多-笔试题】构造字符串

题目描述:

有一个长度为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

你可能感兴趣的:(面试笔试真题)