sub lcss_brute { my( $r1, $r2, $min ) = @_; my( $l1, $l2, $swap ) = ( length $$r1, length $$r2, 0 ); ( $r1, $r2, $l1, $l2, $swap ) = ( $r2, $r1, $l2, $l1, 1 ) if $l1 > $l2; my( $best, @solns ) = 0; for my $start ( 0 .. $l2 - 1 ) { for my $l ( reverse 1 .. $l1 - $start ) { my $substr = substr( $$r1, $start, $l ); my $o = 0; while( $o = 1+index( $$r2, $substr, $o ) ) { if( $l > $best ) { $best = length $substr; @solns = [ $substr, $start, $o-1 ]; } elsif( $l == $best ) { push @solns, [ $substr, $start, $o-1 ]; } } } } return \@solns; }