У меня есть набор строк, которые удовлетворяют следующим ограничениям
Я хочу преобразовать эти строки так, чтобы выполнялись новые ограничения (вместо предыдущих ограничений)
Предположим, что начальный набор строк выглядит следующим образом
city, City, cIty, ciTy, citY, CIty, cITy, ciTY, CITy, cITY, CITY
У меня есть частичный алгоритм, который отображает эти строки на следующие
cit, cit1, cit2, cit3, cit4, cit5, cit6, cit7, cit8, cit9, cit10
Это делается с использованием следующей логики
Используя вышеизложенное, я могу сопоставить старый набор строк с новым набором и удовлетворить новые ограничения.
Однако мой алгоритм ломается, если в исходном наборе есть строка, которая генерируется алгоритмом
Предположим, что начальное множество строк было
city, cit1, cit2, City, cIty, ciTy, citY, CIty, cITy, ciTY, CITy, cITY, CITY,
В этом случае, поскольку cit1 и cit2 уже существуют в исходном наборе, алгоритм прерывается (поскольку он генерирует дубликаты cit1 и cit2)
Есть ли способ, которым я могу рекурсивно справиться с этим?
Я предлагаю вам сделать следующее:
for each input string, s
if (result.contains(s))
result.add(s)
else
do
s = next(s)
while (result.contains(s))
result.add(s);
где next(s)
будет определяться как
split s into [prefixPart, numberPart]
num = numberPart == null ? 0 : numberPart+1
prefixLength = Math.min(prefixPart.length, 5 - num.length)
return prefixPart.substring(0, prefixLength) + num
т.е. next("citY") = "citY0"
и next("cit45") = "cit46"
"1", "2", "3", ...
, нет?