in reply to Challenge: Fast Common Substrings
I throw my hat into the ring with my recursive implementation. I think it could perform reasonably well, since it is a divide-and-conquer type solution.
I'm not sure how it will stand up to the hash-based solutions, and there might be some "correctness" issues...
For the bonus, though, mine increments the count for *any* length of matching substrings.
There are probably many opportunities for optimizations here... please offer criticism.
#! perl -w use strict; my $hits = 0; sub common_substr { my($s1, $s2) = @_; print qq(s1 = $s1, s2 = $s2\n); ($s1, $s2) = ($s2, $s1) if length($s2) < length($s1); if ($s1 eq $s2) { $hits++; return if length($s1) == 1; } my %hash = map { $_ => 1 } split(//, $s1); my $arr = []; for my $s (split(//, $s2)) { push(@$arr, $s) if ! exists($hash{$s}); } my $splitters = join('|', @$arr); for my $s (split(/$splitters/, $s2)) { common_substr($s, $s1); } } common_substr("abcef", "abcdef"); print "hits = $hits\n";
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Challenge: Fast Common Substrings
by thezip (Vicar) on Apr 04, 2007 at 20:45 UTC | |
by BrowserUk (Patriarch) on Apr 04, 2007 at 21:54 UTC |