Что если бы я сохранил сопоставление символов для каждого набора символов и затем увеличивал это число каждый раз ...
Для 1-го набора (ZBANICOT
) это создаст следующие пары символов (28 изих):
ZB, ZA, ZN, ZI, ZC, ZO, ZT
BA, BN, BI, BC, BO, BT
AN, AI, AC, AO, AT
NI, NC, NO, NT
IC, IO, IT
CO, CT
OT
Для 2-го сета (ACNTBZIO
) у меня снова будет 28 пар:
AC, AN, AT, AB, AZ, AI, AO
CN, CT, CB, CZ, CI, CO
NT, NB, NZ, NI, NO
TB, TZ, TI, TO
BZ, BI, BO
ZI, ZO
IO
Для 2 последних сессий у меня будет:
AN, AI, AC, AO, AT, AZ, AB
NI, NC, NO, NT, NZ, NB
IC, IO, IT, IZ, IB
CO, CT, CZ, CB
OT, OZ, OB
TZ, TB
ZB
ZI, ZA, ZN, ZC, ZO, ZT, ZB
IA, IN, IC, IO, IT, IB
AN, AC, AO, AT, AB
NC, NO, NT, NB
CO, CT, CB
OT, OB
TB
(Итак, чтобы подсчитать количество итераций, пусть N
будет равно числу наборов, а M
будет количеством символов в каждом наборе, у нас будет N*(M)((M-1)/2)
или 4*28=112
в этом примере)
Далее я бы посчитал, сколько раз существует каждая пара.Например,
PairCounts["ZB"] == 3
PairCounts["ZA"] == 2
// ...
PairCounts["AO"] == 4
PairCounts["AT"] == 4
// ...
PairCounts["AN"] == 4
PairCounts["AC"] == 4
PairCounts["CT"] == 4
PairCounts["NO"] == 4
PairCounts["NT"] == 4
Тогда, так как у нас есть 4 пары, я бы отбросил все пары, у которых нет счетчика 4. И затем я бы попытался объединить каждую пару, чтобы сформировать самую длинную строку.возможно.