字符串中的重复字符

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

  • 制作一个字母计数的哈希表
  • 将每个字母值设置为仅仅为一个,删除多于一个的出现次数
  • 将哈希表转换为新的删除了重复次数的字符串

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

点赞
用户1516484
用户1516484

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

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-27 04:53:23