この投稿では、このシリーズの以前の投稿 2 つを基に構築していきます。
文字列内のすべての回文を検索する golang 関数を作成します。
これは、「指定された文字列から、その中の回文であるすべての文字列を見つけます」という意味だと解釈します
前の投稿では、指定された文字列からすべての一意の文字列を検索する関数を作成しました。
前回の投稿では、文字列が回文かどうかをチェックする関数を作成しました。
これら 2 つを一緒に使用すると、文字列内のすべての可能な回文を見つけることができます。
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」には、「a」、「aa」、「aba」、「b」の 4 つの回文があります。ただし、FindAllPalindrome は 'a'、'aba'、'aa'、および 'b' を返します。
ここにはいくつかのオプションがあります:
順序に関係なく 2 つの配列を比較する関数を作成します。つまり、2 つの配列は同じ要素と長さを持ちます。
期待される配列と結果の配列の両方を並べ替えてから比較します
簡単にするために、2 番目のオプションを選択しましたが、テスト実行の時間を少し短縮するために、事前に並べ替えられた形式でテスト ケースの予想される結果を構築しました。
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 中国語 Web サイトの他の関連記事を参照してください。