题目描述:给定一个字符串s,请计算输出含有连续两个s作为子串的最短字符串
思路:
- 从特殊到一般
abc -> abcabc,aba -> ababa,aaa -> aaaa,abcdab -> abcdabcdab
- 论证确实是寻找包含s中最后一个字符的s的子串与包含s中第一个字符的s的子串相等的最长子串。
- 显然result.length > s.length
- abcdab -> abcdabcd 不能是 abcdabcddc非最短字符串
- 证明
- 若result[0…r]为输出的最短字符串,
因r <= s.length时,不可能出现两个s作为子串,
则r > s.length。
- 其他证明略,比较明显。
伪代码:
java代码
/**
* 题目:给定一个字符串s,请计算输出含有连续两个s作为子串的最短字符串
* e.g:1. 输入abc,输出abcabc 2. 输入abcdab,输出abcdabcd,3. 输入aaa,输出aaaa
* @param s
* @return result
*/
private static char[] solution01(char[] s) {
int length = s.length;
// 记