对一个长度为n的字符串p,我们可以通过p构造出一个无线长度的字符串s,其中
s[i] = p[i%n]
。
给定一个字符串s,求可以通过上述方法构造出字符串s的最短p
示例1:
输入:abcabc
输出:abc
示例2:
输入:abcab
输出:abc
示例3:
输入:abcabd
输出:abcabd
思路:找s中最短的周期字符串。
class Solution:
def shortestString(self, s):
"""
:type A: List[int]
:rtype: int
"""
p = ""
for i in range(1, len(s)+1): #p长度,从1开始试探,保证最短
j = i
#j为周期字符串的起始,检测[j:j+i],每轮前移i位
while j < len(s):
k = j
#用k来检测,每轮移动1位
while k < (j+i if j+i < len(s) else len(s)):
if s[k] != s[k-i]: #关键,不满足则跳出
break
k += 1
#提前跳出说明字符串不满一个周期
if k < (j+i if j+i < len(s) else len(s)):
break
j += i
#找到周期为i的字符串
if j >= len(s):
p = s[:i]
break
return p