in reply to Finding One String in Another
Here's one algorithm that benefits from "early failures", as soon as a letter in the second word is processed for which there's no corresponding letter in the first word, it returns. It's also using an array to count, not a hash.
It's a small (and untested) subroutine. The benefit of using an array, and splitting on an empty regex is that it can be ported to C trivially. If speed is really important, I'd consider using Inline::C.sub match { my @h; ++ $h [ord] for split // => shift; -- $h [ord] < 0 and return for split // => shift; 1; }
Note also that you could archieve major speedup by not calling the match function a million times - instead call it with a list of pairs of arguments to process. Calling a function is not a cheap task. However, you need to be careful and not kill the gained performance by using too much memory.
Abigail
|
|---|