Untuk siaran ini, kami akan membina 2 daripada siaran terdahulu 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 diperhatikan 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 prasorted untuk memerah sedikit masa ujian dijalankan.
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) } } }
Bagaimana kita boleh membuat ini lebih baik?
Siarkan pendapat anda dalam komen.
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!