我一直在寻找有关在数组中查找重复子串的先前回答的问题,并遇到https://cs.stackexchange.com/questions/79182/im-looking-for-an-algorithm-to-find-unknown-patterns-in-a-string。它完全符合我的要求,只是它分析单个字符串(并查找单个字符的重复),而我想分析一个数组(整数,有些超过9)。我无法按原样使用代码来完成此操作,因为例如“ 10”将被理解为“ 1”和“ 0”。
因此,我要分析[A,B,A,C ...],而不是示例“ ABACBABAABBCBCABA”。更重要的是,我最终想使用整数[1、4、3、1、4 ...]
我尝试修改代码,但是我不完全了解嵌套循环的逻辑。谁能帮忙吗?
答案 0 :(得分:0)
不确定为什么我的问题被否决了,但是我在这里还是一个新话题,如果这是一个不好的问题,我深表歉意。我一直在解决原始问题,但我仍然不了解外循环的原因,但我设法模仿了原始参考脚本(用于数组而不是字符串)。我想发布它,以防其他人发现它的用途。我敢肯定这不是最有效的方法,但它似乎有效。如果有人看到它的孔,请务必告知:
def countSubs(total, sub):
totalCount = 0
for i in range(len(total) - len(sub) + 1):
testCount = 0
for j in range(len(sub)):
if sub[j] == total[i + j]:
testCount += 1
if testCount == len(sub):
totalCount += 1
return totalCount
minLength = 3
minCount = 2
test = [1,2,1,3,2,-1,2,-1,2,4,2,4,2,5,2,5,2,5,6,7,-1,7,-1,8,7,6,-1,9,-1,9,8,7,10]
rectDict = {}
for sublen in range(minLength, int(len(test)/minCount)):
for i in range(0, len(test) - sublen):
sub = test[i:i + sublen]
cnt = countSubs(test, sub)
#not necessary to concatenate with commas, but for visual legibility
subText = ''.join(str(e) + ',' for e in sub)
if cnt >= minCount and subText not in recDict:
recDict[subText[:-1]] = cnt
print(rectDict)