Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cari semua palindrom dalam rentetan

Cari semua palindrom dalam rentetan

WBOY
WBOYasal
2024-07-16 18:44:521179semak imbas

Find all palindromes in a string

Untuk siaran ini, kami akan membina 2 daripada siaran sebelumnya dalam siri ini.

Tulis fungsi golang yang mencari semua palindrom dalam rentetan.

Saya akan mentafsirkan ini bermaksud 'daripada rentetan yang diberikan, cari semua rentetan di dalamnya yang merupakan palindrom'

Dalam siaran sebelumnya, kami mencipta fungsi untuk mencari semua rentetan unik daripada rentetan yang diberikan.

Dalam siaran lepas, kami mencipta fungsi untuk menyemak sama ada rentetan ialah palindrom.

Menggunakan 2 ini bersama-sama, kita boleh mencari semua palindrom yang mungkin dalam rentetan.

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
}

Ternyata, ujian unit mempunyai bebola lengkung yang patut diberi perhatian di sini.

Fungsi FindAllPalindromes membina tatasusunan hasil dalam apa jua susunan palindrom ditemui. Ini mungkin atau mungkin bukan susunan keputusan 'jangkaan' dalam ujian unit.
Sebagai contoh, rentetan, 'aba', mempunyai 4 palindrom: 'a', 'aa', 'aba' dan 'b'. Walau bagaimanapun, FindAllPalindromes mengembalikan 'a', 'aba', 'aa' dan 'b'.

Kami mempunyai beberapa pilihan di sini:

  • tulis fungsi yang membandingkan dua tatasusunan tanpa mengira susunan, iaitu 2 tatasusunan mempunyai elemen dan panjang yang sama.

  • isih kedua-dua tatasusunan yang dijangkakan dan hasil, kemudian bandingkan

Untuk kesederhanaan, saya memilih pilihan kedua tetapi telah membina hasil yang dijangkakan bagi kes ujian dalam bentuk presorted untuk memerah sedikit masa untuk menjalankan ujian.

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

Bagaimanakah kita boleh menjadikannya lebih baik?

Siarkan pendapat anda dalam ulasan.

Terima kasih!

Kod untuk siaran ini dan semua siaran dalam siri ini boleh didapati di sini

Atas ialah kandungan terperinci Cari semua palindrom dalam rentetan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:harlock v.dilepaskanArtikel seterusnya:harlock v.dilepaskan