Längster Palindrom-Teilstring (Schleifen)
Aus einem String, welcher nur aus Kleinbuchstaben besteht und bis zu 1000 Zeichen lang sein kann, soll der längste Palindrom-Teilstring ermittelt werden. Kommen mehrere gleichlange Teil-Strings vor, ist ein beliebiger dieser auszugeben. Gibt es keine Lösung, soll ein Leer-String ausgegeben werden.
Beispiele:
"a" -> "a"
"ab" -> ""
"abba" -> "abba"
"babad" -> "bab" oder "aba"
0 Kommentare
5 Lösung(en)
String.prototype.isPalindrome = function() {
return this == this.split('').reverse().join('');
}
function getLongestPalindromePart(str) {
switch (str.length) {
case 0: return undefined;
case 1: return str;
case 2: return (str.isPalindrome()) ? str : '';
}
let longest = '';
for (let lft = 0; lft < str.length - 1; lft++)
for (let rgt = lft + 1; rgt <= str.length; rgt++) {
let part = str.substring(lft, rgt);
if (part.isPalindrome() && part.length > longest.length)
longest = part;
}
return longest;
}
for (let x of 'a ab abba babad yreliefpfeilerz'.split(' '))
console.log(getLongestPalindromePart(x));
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET 6.x | C+ 10.x | VS-2022
var lst = new List<string> { "a", "aa", "ab", "abba", "babad", "lagelagerregalrege" };
lst.ForEach(x => Console.WriteLine(LongestPalindrome(x)));
static string LongestPalindrome(string s) {
if(s.Length == 1) return s;
var lst = new List<string>();
for (var i = 0; i < s.Length; i++)
for (var k = i + 1; k < s.Length; k++) {
var str = s[i..(k + 1)];
if (str == new string(str.Reverse().ToArray())) lst.Add(str);
}
return lst.OrderBy(x => -x.Length).FirstOrDefault() ?? "";
}
Lösung von: Jens Kelm (@JKooP)
// C++ 17 | VS-2022
#include <iostream>
#include <vector>
std::string get_longest_palindrome(const std::string& str) {
if (str.length() == 1) return str;
std::string lng{};
for (auto beg{ str.begin()}; beg != str.end(); ++beg)
for (auto end{ beg + 1 }; end != str.end(); ++end) {
const std::string tmp{ beg, end + 1 };
auto rev{ tmp };
std::reverse(rev.begin(), rev.end());
if (tmp == rev && tmp.length() > lng.length()) lng = tmp;
}
return lng;
}
int main() {
const std::vector<std::string>vec{ "a", "aa", "ab", "abba", "babad", "lagelagerregalrege" };
for(const auto& elem : vec)
std::cout << elem << " -> " << get_longest_palindrome(elem) << "\n";
}
Lösung von: Jens Kelm (@JKooP)
' VBA
Function GetLongestPalindrome(ByVal str As String)
Dim lng As String, tmp As String
Dim first As Integer, last As Integer
Select Case Len(str)
Case 1: lng = str
Case Else:
For first = 1 To Len(str)
For last = first + 1 To Len(str)
tmp = Mid(str, first, last)
If tmp = StrReverse(tmp) And Len(tmp) > Len(lng) Then lng = tmp
Next last
Next first
End Select
GetLongestPalindrome = lng
End Function
Sub Main()
Dim arr As Variant, e As Variant
arr = Array("a", "aa", "ab", "abba", "babad", "lagelagerregalrege")
For Each e In arr
Debug.Print e, GetLongestPalindrome(e)
Next
End Sub
Lösung von: Jens Kelm (@JKooP)
def longest_palindrom(s):
longest_palindrom = ""
for i in range(len(s)):
for r in (i, i+1):
l = i
found = False
while 0 <= l < len(s) and 0 <= r < len(s):
if s[l] == s[r]:
l, r = l-1, r+1
found = True
else:
break
if found:
l, r = l+1, r-1
if r-l+1 > len(longest_palindrom):
longest_palindrom = s[l:r+1]
return longest_palindrom
for s in ["a", "ab", "abba", "babad", "yreliefpfeilerz"]:
print(longest_palindrom(s))
Lösung von: Name nicht veröffentlicht
Verifikation/Checksumme:
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung: