首頁  >  文章  >  後端開發  >  尋找字串中的所有回文

尋找字串中的所有回文

WBOY
WBOY原創
2024-07-16 18:44:521121瀏覽

Find all palindromes in a string

對於這篇文章,我們將以本系列之前的 2 篇文章為基礎。

寫一個 golang 函數來找出字串中的所有回文。

我將其解釋為“從給定的字串中,找到其中所有回文字串”

在上一篇文章中,我們建立了一個函數來尋找給定字串中的所有唯一字串。

在上一篇文章中,我們建立了一個函數來檢查字串是否是回文。

結合使用這兩個,我們可以找到字串中所有可能的回文。

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
}

事實證明,單元測試有一個值得注意的曲線球。

FindAllPalindromes 函數依照找到回文的順序建立結果陣列。這可能是也可能不是單元測試中「預期」結果的順序。
例如,字串「aba」有 4 個回文:「a」、「aa」、「aba」和「b」。但是,FindAllPalindromes 返回“a”、“aba”、“aa”和“b”。

我們這裡有幾個選擇:

  • 寫一個函數來比較兩個陣列而不考慮順序,即兩個陣列具有相同的元素和長度。

  • 將預期數組和結果數組進行排序,然後比較

為了簡單起見,我選擇了第二個選項,但以預先排序的形式建立了測試案例的預期結果,以節省測試運行的時間。

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

我們怎麼做得更好?

在評論中發表你的想法。

謝謝!

這篇文章以及本系列所有文章的程式碼可以在這裡找到

以上是尋找字串中的所有回文的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:哈洛克訴釋放下一篇:哈洛克訴釋放