Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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

Bitte melde dich an um einen Kommentar abzugeben

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit:
Schwierigkeit: Mittel
Webcode: pyqz-ch4i
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen