[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: common prefix?
- From: Andre <arpin@...>
- Date: Fri, 17 Jul 2009 13:56:01 +0000 (UTC)
Petite Abeille <petite.abeille <at> gmail.com> writes:
>
> Hello,
>
> Does anyone has a little function to compute the common prefix of a
> list of strings?
>
> E.g.:
>
> local aList = { 'foobarbaz', 'foobar', 'foo' }
>
> print( CommonPrefix( aList ) )
>
> > foo
>
> TIA.
>
> Cheers,
>
> PA.
>
> P.S.
>
I think this is really a matching problem
------------------------ start
function getPrefix(t)
-- empty tables should returned an empty string
local prefix = ""
for k,v in pairs(t) do
if #prefix == 0 then
-- first entry in the table is the longest prefix
prefix = v
else
repeat
-- if the prefix matches this is still the longest prefix
if string.match(v, '^'..prefix) then break end
-- remove the last character in the prefix
prefix = string.sub(prefix,1,#prefix-1)
until #prefix == 0
end
-- we much check for an empty prefix otherwise we would
-- use the next string as the prefix
if #prefix == 0 then break end
end
return prefix
end
assert ('foo' == getPrefix({'foobarbaz', 'foobar', 'foofoo'}))
---------------------------end
For efficiency you could set the prefix to "^" so you would not have to
concatenate the caret in each loop. But this is easier to code.
Andre