我需要编写一个函数,该函数接受一个字符串并返回它,并在 Lua 中删除了重复字符。我需要帮助的是...
- 用字母和计数做一个哈希
- 使每个字母仅等于一个,删除多个出现
- 将哈希转换为删除重复项的新字符串
一个简单的函数/算法将不胜感激!
我需要编写一个函数,该函数接受一个字符串并返回它,并在 Lua 中删除了重复字符。我需要帮助的是...
一个简单的函数/算法将不胜感激!
如果您只需要每个字符的一个实例,那么您可能不需要跟踪计数;您可以将输入字符串与用于生成输出的同一表进行比较。
local function contains(tbl, val)
for k,v in pairs(tbl) do
if v == val then return true end
end
return false
end
local function uniq(str)
local out = {}
for s in str:gmatch(".") do
if not contains(out, s) then out[#out+1] = s end
end
return table.concat(out)
end
print( uniq("the quick brown fox jumps over the lazy dog") )
-- the quickbrownfxjmpsvlazydg
对于短字符串,这可能会比下面的函数慢,但通常最好避免在 Lua 中进行过多的字符串连接,原因如下所述。如果您确定输出字符串会相当短,您可以摆脱contains()
并使用它:
local function uniq(str)
local out = ""
for s in str:gmatch(".") do
if not out:find(s) then out = out .. s end
end
return out
end