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 }
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) } } }
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!