首页 > 解决方案 > 在整个给定字符串中一致的重复子字符串模式——python

问题描述


def repeated(s):
    repeatedStrs = []
    i = len(s)/2 #get middle index of s
    j = i = int(i)
    # as long as index doesn't become 0, i.e., we are not comparing 
    # two single letters(the first letter of s and the last letter of s)
    while i != 0: 
        #if the first i letters are equal to the last i letters
        if s[0:i] == s[-i:len(s)]: 
            # adding the repeated string (only repeated in beginning 
            # and end) to a list so we can later confirm that this repeated 
            # string repeats consecutively throught the entire string
            repeatedStrs.append(s[0:i]) 
        i -= 1
    count = 0
    for repeatedStr in repeatedStrs:
        lenOfRepStr = len(repeatedStr)
        #ensuring that the repeated string fits perfectly into the string
        if (lenOfRepStr > 0 and len(s) % lenOfRepStr == 0): 
            # len(s) - lenOfRepStr + 2 --> ensures that we don't go
            # past the highest index since we compare the next lenOfRepStr
            # indexes below; we move up by lenOfRepStr each pass

            for q in range(0, len(s) - lenOfRepStr + 2, lenOfRepStr):               
                # compares adjacent lenOfRepStr letters to see if it 
                # is not equal to our repeated substring 
                if repeatedStr != s[q : (q+lenOfRepStr)]: 
                    # breaks so we move onto the next choice of repeatedStr 
                    # that was in our array of repeatedStrs
                    break 
                #this is our counter so we can ensure that for every adjacent 
                # pairs of the repeatedStr, we go through the 
                # entire string 's' the exact same times
                count += 1 
                # seeing if we had the substring the exact same times that
                # it can fit in the string 's'
                if count == len(s)/lenOfRepStr: 
                    return True
    return False

这是我正在尝试的问题:https ://edabit.com/challenge/L2nw2N2YqZCboiaYM

我知道有更快更简单的方法来解决这个问题,但我想用这种方式解决它,因为我已经开始了

所以这是我经历的思考过程:我会检查是否有任何重复的子字符串出现在字符串 's' 的开头和结尾。我会继续寻找在开头和结尾出现的子串的其他选项。然后,一旦我构建了这些重复子字符串的各种选项的数组,这些选项在单词的开头和结尾重复,然后我开始检查这些重复的子字符串是否在整个字符串中连续出现,如果我找到这样的我返回真,否则,假。所以我试图弄清楚为什么这不适用于非常大的字符串。

这是不起作用的字符串(它应该返回 false,但它返回 true:

fqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmtbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlh

and this is the substring it tells me I get: fqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlh

apparently: the substring found: fqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlh

不等于

fqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmsbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlhfqmtbezecsinaikkjiehlkyqhmbytyvuyllxdlsggxqehktsyojzxnyhqvjepwzafzlsbufugkuabsnoypvlfuqeuxlh

标签: pythonsubstringrepeat

解决方案


你有:

count = 0
for repeatedStr in repeatedStrs:
    lenOfRepStr = len(repeatedStr)
    ...

应该

for repeatedStr in repeatedStrs:
    count = 0
    lenOfRepStr = len(repeatedStr)
    ...

推荐阅读