Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^3: Capture Lookahead

by fishbot_v2 (Chaplain)
on Jul 26, 2005 at 11:46 UTC ( #478145=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Capture Lookahead
in thread Capture Lookahead

If you want to find palindromes, why not do it with a regex directly?

#!/usr/bin/perl use strict; use warnings; my $str = do {local $/; <DATA>}; $str =~ s/\s+//g; while ( $str =~ m/( (..+) .? (??{ reverse $2 }) )/xgc ) { print pos( $str ) . ": $1\n"; pos( $str ) = $-[0] + 1; # slide pos back to the left }

prints:

14: AGGGA 21: TACAT 25: GTTG 55: GAAAAAAAG ...etc...

I'm not sure how it would compare with the two-stage approach for speed, though. It is much faster if you minimize the qualifier ..+?, but then you end up with the shortest palindrome at each position, rather than the longest.

I make the assumption that you don't care about palindromes shorter than 4 characters. If you bump that upwards, things get faster.

Update: I tested, and it looks like the substr approach is considerably faster, particularly if you do it in a single pass.


Comment on Re^3: Capture Lookahead
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://478145]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2015-07-05 10:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (61 votes), past polls