2012-07-27 52 views
1

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

  • 使字母和计数
  • 使每个字母等于只有一个散列,删除出现了多次
  • 哈希转换到新的字符串复制删除

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

回答

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,理由概括here。如果你确定输出字符串将是相当短的,你可以摆脱并使用此:

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 
+0

我用了较短的,它完美!非常感谢你,我非常感谢你的帮助。完美解决方案 – 2012-07-27 04:59:37