python在string中查找重复的子字符串

时间:2016-12-10 15:44:41

标签: python string substring repeat

我在Python中寻找一个函数,你在其中给出一个字符串作为输入,其中某个单词已被重复多次,直到达到一定的长度。

输出就是那个词。重复的单词并不是必须重复的,也可能根本没有重复。

例如:

"pythonpythonp" => "python"

"hellohello" => "hello"

"appleapl" => "apple"

"spoon" => "spoon"

有人能给我一些关于如何编写这种功能的提示吗?

2 个答案:

答案 0 :(得分:6)

您可以通过重复子字符串一定次数并测试它是否等于原始字符串来实现。

除非你将其保存为变量

,否则你必须为每一个可能的字符串长度尝试它

以下是代码:

def repeats(string):
    for x in range(1, len(string)):
        substring = string[:x]

        if substring * (len(string)//len(substring))+(substring[:len(string)%len(substring)]) == string:
            print(substring)
            return "break"

    print(string)

repeats("pythonpytho")

答案 1 :(得分:0)

首先构建一个前缀数组。

反向循环,当你第一次在字符串中找到重复的东西时停止(也就是说,它有str.count()>1

现在,如果相同的子字符串紧邻其自身,则可以将其作为您要查找的单词返回,但是您必须考虑'appleappl'示例,其中提出的算法将返回{ {1}}。为此,当您在字符串中找到一个多次存在的子字符串时,您将返回子字符串加上其下一次出现之间的任何内容,即appl返回'appleappl'。如果没有找到这样的字符串,则返回整个单词,因为没有重复。

'appl' +'e' = 'apple'