Longest palindromic substrings: Difference between revisions
(→{{header|REXX}}: added the computer programming language REXX.) |
|||
Line 2: | Line 2: | ||
Let given a string s. |
Let given a string s. |
||
The goal is to find the longest palindromic substring in s. |
The goal is to find the longest palindromic substring in s. |
||
<br><br> |
|||
=={{header|REXX}}== |
|||
<lang rexx>/*REXX program finds and displays the longest palindromic string(s) in a given string. */ |
|||
parse arg s . /*obtain optional argument from the CL.*/ |
|||
if s=='' | s=="," then s= 'babaccd' /*Not specified? Then use the default.*/ |
|||
L= length(s) /*obtain length of the specified string*/ |
|||
longest= 0 /*longest palindrome found (so far). */ |
|||
@.= /*initialize all possible lists to null*/ |
|||
do j=1 for L /*search for palindromes in the string.*/ |
|||
do k=j to L; LL= k - j + 1 /*obtain length of possible palindromes.*/ |
|||
if LL<longest then iterate /*Palindrome length<max? Then skip it.*/ |
|||
$= substr(s, j, LL) /*obtain a possible palindromic substr.*/ |
|||
if $\==reverse($) then iterate /*Not a palindrome? Then skip it.*/ |
|||
longest= max(longest, LL) /*set the longest palindrome to this L.*/ |
|||
@.LL= @.LL $ /*add a palindromic substring to a list*/ |
|||
end /*k*/ |
|||
end /*j*/ |
|||
if longest==0 then do; say 'no longest palindromic string was found for: ' s; exit 13 |
|||
end |
|||
say ' longest palindromic substrings for string: ' s /*show title.*/ |
|||
say '────────────────────────────────────────────'copies('─', 2+length(s)) /*show sep. */ |
|||
do n=1 for words(@.longest) /*show longest palindromic substrings. */ |
|||
/*show pals. */ |
|||
say ' (length='longest") " word(@.longest, n) |
|||
end /*n*/ /*stick a fork in it, we're all done. */</lang> |
|||
{{out|output|text= when using the default input:}} |
|||
<pre> |
|||
longest palindromic substrings for string: babaccd |
|||
───────────────────────────────────────────────────── |
|||
(length=3) bab |
|||
(length=3) aba |
|||
</pre> |
|||
=={{header|Ring}}== |
=={{header|Ring}}== |
||
<lang ring> |
<lang ring> |
Revision as of 16:53, 28 September 2020
Let given a string s. The goal is to find the longest palindromic substring in s.
REXX
<lang rexx>/*REXX program finds and displays the longest palindromic string(s) in a given string. */ parse arg s . /*obtain optional argument from the CL.*/ if s== | s=="," then s= 'babaccd' /*Not specified? Then use the default.*/ L= length(s) /*obtain length of the specified string*/ longest= 0 /*longest palindrome found (so far). */ @.= /*initialize all possible lists to null*/
do j=1 for L /*search for palindromes in the string.*/ do k=j to L; LL= k - j + 1 /*obtain length of possible palindromes.*/ if LL<longest then iterate /*Palindrome length<max? Then skip it.*/ $= substr(s, j, LL) /*obtain a possible palindromic substr.*/ if $\==reverse($) then iterate /*Not a palindrome? Then skip it.*/ longest= max(longest, LL) /*set the longest palindrome to this L.*/ @.LL= @.LL $ /*add a palindromic substring to a list*/ end /*k*/ end /*j*/
if longest==0 then do; say 'no longest palindromic string was found for: ' s; exit 13
end
say ' longest palindromic substrings for string: ' s /*show title.*/ say '────────────────────────────────────────────'copies('─', 2+length(s)) /*show sep. */
do n=1 for words(@.longest) /*show longest palindromic substrings. */ /*show pals. */ say ' (length='longest") " word(@.longest, n) end /*n*/ /*stick a fork in it, we're all done. */</lang>
- output when using the default input:
longest palindromic substrings for string: babaccd ───────────────────────────────────────────────────── (length=3) bab (length=3) aba
Ring
<lang ring> load "stdlib.ring"
st = "babaccd" palList = []
for n = 1 to len(st)-1
for m = n+1 to len(st) sub = substr(st,n,m-n) if ispalindrome(sub) and len(sub) > 1 add(palList,[sub,len(sub)]) ok next
next
palList = sort(palList,2) palList = reverse(palList) resList = [] add(resList,palList[1][1])
for n = 2 to len(palList)
if palList[1][2] = palList[n][2] add(resList,palList[n][1]) ok
next
see "Input: " + st + nl see "Longest palindromic substrings:" + nl see resList </lang>
- Output:
Input: babaccd Longest palindromic substrings: bab aba