在字符串中重复

时间:2012-07-27 04:18:11

标签: string hash lua duplicates character

我需要编写一个带有字符串的函数,并在Lua中删除重复的字符。我需要帮助的是......

  • 使用字母和计数制作哈希
  • 使每个字母仅等于一个,删除多个事件
  • 将哈希转换为删除了重复项的新字符串

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

1 个答案:

答案 0 :(得分: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

对于短字符串,这可能比下面的函数慢,但由于概述here的原因,通常最好避免在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