1

我需要编写一个函数,该函数接受一个字符串并返回它,并在 Lua 中删除了重复字符。我需要帮助的是...

  • 用字母和计数做一个哈希
  • 使每个字母仅等于一个,删除多个出现
  • 将哈希转换为删除重复项的新字符串

一个简单的函数/算法将不胜感激!

4

1 回答 1

4

如果您只需要每个字符的一个实例,那么您可能不需要跟踪计数;您可以将输入字符串与用于生成输出的同一表进行比较。

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
于 2012-07-27T04:53:23.643 回答