拼多多 牛客7.22笔试算法岗 第二题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012033124/article/details/81368651

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

猜你喜欢

转载自blog.csdn.net/u012033124/article/details/81368651