2016-09-14 9 views
0

私は多くの文字列を持ち、部分文字列のセットに対してそれらをテストしたいと考えています。どのセットにすべての部分文字列が含まれているかを確認したい。だから、は、別のセットのすべての部分文字列のセットです

set1 = {'A123', 'B234', 'C345'} 
set2 = {'A123', 'F234', 'H345'} 
substring_set1 = {'A', 'B'} 

擬似コードでこのような何か:多分

all(substring_set1.areSubstrings(set1)) 
True 

all(substring_set1.areSubstrings(set2) 
False 

またはこのような何か?

if all(x in v for v in set1 for x in substring_set1): 
    do stuff 

私はループ用の配列でこれを行うことができると思いますが、おそらくこれを行うクリーナーの方法があると思います。助言がありますか?ありがとう!

+0

であなたのアプローチは 'ALL'が動作しない理由はありますか?結果は 'False'ではなくTrueでなければなりませんか? –

+0

これらのセットはどれくらいの大きさですか?素朴なアプローチは、文字列の小さなセットに対しては機能しますが、O(N^2)時間(すべての文字列をセットのすべての要素と比較することになります)がかかりますので、大きな文字列の場合は非効率になります。この問題を効率的に解決するには、接尾辞ツリーや接尾辞配列を使用することですが、これらのデータ構造は実装するのが非常に複雑です。それらを提供するライブラリがあります。 – Bakuriu

答えて

3

次のようなアプローチは、私には十分にきれいになります。

​​
関連する問題