Finden Sie alle Palindrome in einer Zeichenfolge

WBOY
Freigeben: 2024-07-16 18:44:52
Original
1179 Leute haben es durchsucht

Find all palindromes in a string

Für diesen Beitrag werden wir auf zwei der vorherigen Beiträge der Serie aufbauen.

Schreiben Sie eine Golang-Funktion, die alle Palindrome in einer Zeichenfolge findet.

Ich werde dies so interpretieren, dass es bedeutet: „Finde aus der gegebenen Zeichenfolge alle darin enthaltenen Zeichenfolgen, die Palindrome sind“

In einem früheren Beitrag haben wir eine Funktion erstellt, um alle eindeutigen Zeichenfolgen aus einer bestimmten Zeichenfolge zu finden.

Im letzten Beitrag haben wir eine Funktion erstellt, um zu überprüfen, ob eine Zeichenfolge ein Palindrom ist.

Wenn wir diese beiden zusammen verwenden, können wir alle möglichen Palindrome in einer Zeichenfolge finden.

func FindAllPalindromes(str string) []string {
    allPalindromes := []string{}
    uniqueStrings := uniquecombos.FindUniqueCombinations(str)
    for _, uniqueString := range uniqueStrings {
        if palindromecheck.PalindromeCheck(uniqueString) {
            allPalindromes = append(allPalindromes, uniqueString)
        }
    }
    return allPalindromes
}
Nach dem Login kopieren

Es stellt sich heraus, dass der Unit-Test hier eine bemerkenswerte Kuriosität aufweist.

Die Funktion „FindAllPalindromes“ erstellt das Ergebnisarray in der Reihenfolge, in der die Palindrome gefunden werden. Dies kann die Reihenfolge des „erwarteten“ Ergebnisses im Komponententest sein oder auch nicht.
Beispielsweise hat die Zeichenfolge „aba“ vier Palindrome: „a“, „aa“, „aba“ und „b“. Allerdings gibt FindAllPalindromes „a“, „aba“, „aa“ und „b“ zurück.

Hier haben wir mehrere Möglichkeiten:

  • Schreiben Sie eine Funktion, die zwei Arrays ohne Rücksicht auf die Reihenfolge vergleicht, d. h. die beiden Arrays haben die gleichen Elemente und die gleiche Länge.

  • sortieren Sie sowohl das erwartete als auch das Ergebnisarray und vergleichen Sie es dann

Der Einfachheit halber habe ich die zweite Option gewählt, aber das erwartete Ergebnis der Testfälle in vorsortierter Form erstellt, um ein wenig Zeit für Testläufe zu sparen.

func TestFindAllPalindromes(t *testing.T) {
    testCases := []struct {
        input    string
        expected []string
    }{
        // note that expected arrays have been presorted for quicker test runs
        {"", []string{}},
        {"a", []string{"a"}},
        {"ab", []string{"a", "b"}},
        {"aba", []string{"a", "aa", "aba", "b"}},
        {"aab", []string{"a", "aa", "b"}},
        {"abcba", []string{"a", "aa", "aba", "abba", "abcba", "aca", "b", "bb", "bcb", "c"}},
    }

    for _, tc := range testCases {
        results := FindAllPalindromes(tc.input)
        // sort result to match expected order
        slices.Sort(results)
        if !reflect.DeepEqual(results, tc.expected) {
            t.Errorf("findUniqueCombinations(%q) = %v; expected %v", tc.input, results, tc.expected)
        }
    }
}
Nach dem Login kopieren

Wie können wir das verbessern?

Posten Sie Ihre Gedanken in den Kommentaren.

Danke!

Den Code für diesen Beitrag und alle Beiträge dieser Reihe finden Sie hier

Das obige ist der detaillierte Inhalt vonFinden Sie alle Palindrome in einer Zeichenfolge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!