the problem in your code was, you were starting with the smallest string ($mover = 2 and $end = 6)which always return 'own' thats why the output was showing 'own'. Now we are starting with the largest possible string and keeps on reducing the string size till we find the matched string in lexicon or the string length becomes 0.%wordlist= ("unknown", -1); %lexicon = ("own", 1, "known", 1); foreach my $q (keys %wordlist) { push (@array, split(//, $q)); $end = $#array; $mover = 1; print "\nend : $end \nmove : $mover\n"; &rightside(); print "$right\n"; @array = (); } sub rightside { last if($mover == 0 or $move == $end); if (exists $lexicon{join q(), @array[$mover..$end]}) { $right = join q(), @array[$mover..$end]; print "\nright:$right\n"; } else { $mover++; &rightside(); } }
In reply to Re: Longest String Matching
by Rahul6990
in thread Longest String Matching
by Dr Manhattan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |