Как это сделать?
В Lua есть встроенная функция для генерации всех перестановок строки, но вот несколько вещей, которые могут оказаться полезными.
Подстроки
Вероятно, самым простым решением, но и наименее гибкий. Вместо комбинаций вы можете проверить, существует ли подстрока в заданной строке.
if str:find(substr) then
--code
end
Если это решает вашу проблему, я настоятельно рекомендую ее.
Получить все перестановки
Более дорогой, но все-таки рабочий раствор. Это почти то, что вы просили.
function GetScrambles(str, tab2)
local tab = {}
for i = 1,#str do
table.insert(tab, str:sub(i, i))
end
local tab2 = tab2 or {}
local scrambles = {}
for i = 0, Count(tab)-1 do
local permutation = ""
local a = Count(tab)
for j = 1, #tab do
tab2[j] = tab[j]
end
for j = #tab, 1, -1 do
a = a/j
b = math.floor((i/a)%j) + 1
permutation = permutation .. tab2[b]
tab2[b] = tab2[j]
end
table.insert(scrambles, permutation)
end
return scrambles
end
Что вы спросили
В основном это будет именно то, что вы изначально просили. Это то же самое, что и приведенный выше код, за исключением каждой подстроки строки.
function GetAllSubstrings(str)
local substrings = {}
for i = 1,#str do
for ii = i,#str do
substrings[#substrings+1]=str:sub(ii)
end
end
return substrings
end
Capitals
Вы в основном придется с каждой перестановки, все возможные комбинации капиталов с ним.
Это не должно быть слишком сложно, я уверен, что вы можете написать код :)
Вы шутите?
После этого вам, вероятно, должно быть интересно. Все это действительно необходимо? Кажется, это немного!
Ответ на этот вопрос заключается в том, что вы делаете. Вам действительно нужны все комбинации заданных символов? Я так не думаю. Вы говорите, что вам нужно это для чувствительности к регистру в комментариях ... Но знаете ли вы, что можете просто преобразовать его в нижний/верхний регистр? Это очень просто
local str = "hELlO"
print(str:lower())
print(str:upper())
Это КАК вы должны хранить имена, иначе вы должны оставить его чувствительным к регистру.
Вы решили
Теперь вы выбираете то, что вы собираетесь делать. Какое бы направление вы ни выбрали, я желаю вам удачи!
Вам действительно нужно создавать все такие комбинации или просто хотите проверить, присутствует ли новая строка во всех таких комбинациях другой строки? Это две разные задачи с различными решениями. – dlask
все комбинации yeah – sarin
Если вы хотите использовать его как 'if exists (string)', если я его правильно понимаю, вам не нужны все комбинации. Итак, что именно ожидается? –