私は文字列のセットを持っています
[ abcd
,
efgh
,
abefg
]
すべての文字をカバーする文字列の最小数を見つける方法 ( abcdefgh
)
答えはabcd
とefgh
です。しかし、この答えを見つけるためのアルゴリズムは何でしょうか?
私は文字列のセットを持っています
[ abcd
,
efgh
,
abefg
]
すべての文字をカバーする文字列の最小数を見つける方法 ( abcdefgh
)
答えはabcd
とefgh
です。しかし、この答えを見つけるためのアルゴリズムは何でしょうか?
返信ありがとうございます。最終的に完了しました。他の人への参照として、以下のアルゴリズムを簡単な言葉で示しました。
サブ optimize_strings()
配列変数内の文字列のリストと整数内の文字列の数をキャプチャする
最適化された文字列の配列を空として初期化し、それへのポインタをゼロとして初期化します
配列内のすべての文字と変数内の文字数のリストを取得する
Do While 文字数>0
すべての文字の頻度をゼロにリセットし、別の配列でカバーされていない文字列のすべての文字の頻度を計算します
各文字列のカバーされていない文字数をゼロにリセットし、個別の配列内の各文字列のカバーされていない文字数を計算します
文字頻度配列に基づいて、文字配列内の文字を昇順に並べ替えます
文字配列の先頭にある文字を含む文字列のリストを取得し、それらをフィルター処理された文字列配列に配置します
このループのステップ 2 で格納されたカバーされていない文字の数に基づいて、フィルター処理された文字列配列を降順でバブル ソートします。
フィルター処理された文字列配列の先頭を最適化された文字列配列に格納し、そのポインターを 1 に増やします
最適化された文字列内のすべての文字を繰り返し処理し、その中に存在するすべての文字を文字配列から削除します
ループ
最適化された文字列配列に存在する最適化された文字列の結果を出力します
サブ終了
パイソン
>>> a="abcd efgh abefg"
>>> set(a)
set(['a', ' ', 'c', 'b', 'e', 'd', 'g', 'f', 'h'])
>>> ''.join(set(a))
'a cbedgfh'
>>> ''.join(set(a)-set(' '))
'acbedgfh'