in reply to Nonrepeating characters in an RE
DB<130> @a = ("abc","aab","abb","aba") DB<131> for (@a) { say "$_ : $1,$2" if /^(.)(?!.*\1)(.)(?!.*\2)/ } abc : a,b DB<132>
There are advanced features for repeating patterns where you don't need to know the length in advance. (see perlretut )
But I'd rather prefer a simple split and %seen-hash solution, which is far easier to maintain.
Wait ... please try (and test!!!) this solution with relative backrefrences:
DB<142> @a = ("abc","aab","abb", "aba","abcd","abca" ) DB<143> for (@a) { say "$_" if /^ ( (.) (?!.*\g-1) )+ $/x } abc abcd DB<144>
still this regex solution will have O(n^2), while a %seen hash solution can do in O(n)
Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Nonrepeating characters in an RE (updated)
by hv (Prior) on Aug 16, 2022 at 02:46 UTC | |
by AnomalousMonk (Archbishop) on Aug 16, 2022 at 07:27 UTC | |
by LanX (Saint) on Aug 16, 2022 at 14:30 UTC | |
by LanX (Saint) on Aug 16, 2022 at 09:11 UTC | |
by hv (Prior) on Aug 16, 2022 at 12:54 UTC | |
by BillKSmith (Monsignor) on Aug 16, 2022 at 13:54 UTC | |
by LanX (Saint) on Aug 16, 2022 at 12:58 UTC | |
|
Re^2: Nonrepeating characters in an RE (updated)
by BernieC (Pilgrim) on Aug 16, 2022 at 00:59 UTC |