Я хочу получить наиболее часто встречающуюся подстроку размера k в строке. Для этого я использую таблицу для хранения количества вхождений каждой подстроки. Вот код:
function frequentWords(seq, k)
local subs = ""
local counter = {}
for i = 1,(seq:len()-k+1) do
subs = seq:sub(i, i+k-1)
counter[subs] = (counter[subs] and counter[subs] + 1 or 1)
--print(subs .. ": " .. counter[subs])
end
end
Строка counter[subs] = (counter[subs] and counter[subs] + 1 or 1)
имеет то же среднее значение, что и counter[subs] = (counter[subs] ? counter[subs]+1 : 1)
. Эта строка была бы только counter[subs] = counter[subs] + 1
, если бы мы могли установить каждый новый элемент counter
с 0
. Возможно ли это в Луа? Если нет, то как лучше всего сделать что-то подобное?
Например, в Ruby это делается путем объявления Hash следующим образом:
counter = Hash.new(0)