personally I much prefer hippos approach with lexical sorting!
FWIW here a solution with a regex searching through a concatenation of all strings for the longest repeated pattern:
use strict; use warnings; my @strings = ( 'string that I need to gather the common base from: number 1 and s +ome other junk in it', 'string that I need to gather the common base from: number 2 and s +ome other junk in it', 'string that I need to gather the common base from: number 3 and s +ome other junk in it', ); my $sep = "\0"; my $nosep = "[^$sep]"; my $all = join $sep, @strings; $all =~ /^ ($nosep*) $nosep*? ( $sep \1 $nosep*? )+ $/x; print "solution: '$1'";
OUTPUT:
solution: 'string that I need to gather the common base from: number '
Please note that you need to take care that the separator (here \0 ) is not part of any string.
You could easily check by counting $sep in $all.
Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Je suis Charlie!
In reply to Re: An efficient way to gather a common portion of several strings' beginnings
by LanX
in thread An efficient way to gather a common portion of several strings' beginnings
by igoryonya
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |