我正在进行文本挖掘,试图清理弹幕数据。(弹幕是视频网站上的一种评论)我的数据中有表达式的重复。("LOL LOL LOL","LMAOLMAOLMAOLMAO")我想得到"LOL","LMAO"。
在大多数情况下,我想找到序列的最小周期。
边界情况:输入序列的尾部可以被视为周期子序列的一部分。
"eat an apple eat an apple eat an" # input
"eat an apple" # output
还有一些其他的测试用例:
cases = [
"abcd", #4 abcd
"ababab", #2 ab
"ababcababc", #5 ababc
"abcdabcdabc", #4 abcd
]
注意:对于最后一个字符串 "abcdabcdabc","abcd" 比 "abcdabcdabc" 更好,因为最后三个字符 "abc" 是 "abcd" 的一部分。
def solve(x):
n = len(x)
d = dict()
T = 0
k = 0
while k < n:
w = x[k]
if w not in d:
d[w] = T
T += 1
else:
while k < n and d.get(x[k], None) == k%T:
k += 1
if k < n:
T = k+1
k += 1
return T, x[:T]
这段代码可以正确输出前两种情况的答案,但无法处理所有情况。