Longest palindromic substrings: Difference between revisions
Content added Content deleted
Drkameleon (talk | contribs) (Added Arturo implementation) |
|||
Line 603: | Line 603: | ||
The longest palindromic substring of abaracadabra is: "ara" |
The longest palindromic substring of abaracadabra is: "ara" |
||
</pre> |
</pre> |
||
=={{header|Mathematica}}/{{header|Wolfram Language}}== |
|||
<lang Mathematica>ClearAll[ExpandSubsequenceTry, LongestPalindromicSubsequence] |
|||
ExpandSubsequenceTry[seq_List, beginpos : {a_, b_}] := |
|||
Module[{len, maxbroaden, last}, |
|||
len = Length[seq]; |
|||
maxbroaden = Min[a - 1, len - b]; |
|||
last = maxbroaden; |
|||
Do[ |
|||
If[! PalindromeQ[Take[seq, {a - j, b + j}]], |
|||
last = j - 1; |
|||
Break[]; |
|||
] |
|||
, |
|||
{j, maxbroaden} |
|||
]; |
|||
{a - last, b + last} |
|||
] |
|||
LongestPalindromicSubsequence[l_List] := |
|||
Module[{evenposs, oddposs, subseqs}, |
|||
evenposs = SequencePosition[l, {x_, x_}]; |
|||
oddposs = SequencePosition[l, {x_, y_, x_}]; |
|||
subseqs = Join[evenposs, oddposs]; |
|||
subseqs = ExpandSubsequenceTry[l, #] & /@ subseqs; |
|||
If[Length[subseqs] > 0, |
|||
TakeLargestBy[Take[l, #] & /@ subseqs, Length, 1][[1]] |
|||
, |
|||
{} |
|||
] |
|||
] |
|||
StringJoin@LongestPalindromicSubsequence[Characters["three old rotators"]] |
|||
StringJoin@LongestPalindromicSubsequence[Characters["never reverse"]] |
|||
StringJoin@LongestPalindromicSubsequence[Characters["stable was I ere I saw elbatrosses"]] |
|||
StringJoin@LongestPalindromicSubsequence[Characters["abracadabra"]] |
|||
StringJoin@LongestPalindromicSubsequence[Characters["drome"]] |
|||
StringJoin@LongestPalindromicSubsequence[Characters["the abbatial palace"]]</lang> |
|||
{{out}} |
|||
<pre>"rotator" |
|||
"ever reve" |
|||
"table was I ere I saw elbat" |
|||
"aca" |
|||
"" |
|||
"abba"</pre> |
|||
=={{header|Nim}}== |
=={{header|Nim}}== |