2016-12-19 14 views
2

私は最大の文字列一致で一致するセットを見つけるための最良のソリューションを探しています。ここで は、たとえば、セット上の例では最大一致数が複数のセットから設定されています

set1 = ["a","d","q","s"] 
set2 = ["a","m","t","b","z"] 
set3 = ["a","x","b","s","r","t"] 

inSet = ["a","b","c","x"] 

他のリストであり、SET3は最大です。一致カウント(3)。

最小限の実行で見つけるのに最適なアルゴリズムは何ですか? 任意のポインタまたは提案をいただければ幸いです。

Set<Set<String>> set = new Set<>(); 
//add Set<String>s 
Set<String> maxMatchSet = set.stream() 
           .max(Comparator.comparingInt((value -> Sets.intersection(value, inSet).size())) 
           .get(); 

OK、今いくつかの理論:

+2

あなたの最初のアイデアは何ですか?なぜあなたは思ったほど最適なものではないでしょうか?この問題を解決する方法を教えてください! – n247s

+0

最初に、新しいSet <>(inSet).retainAll(set1/set2/set3)を使用できます。 –

答えて

2

は、私たちはSet<String> setGuava.Setsてみましょう。 ["a", "b"]はセットではなく、配列(またはリスト)です。私たちはJavaで異なるデータ構造を持っています。セットは{}で表されます。

とにかく、重要なのはコードです。

Set<String> set = new HashSet<>(); 

Set

List<String> list = new ArrayList<>(); 

Listを初期化します初期化します。それでもなお別のオプションがあります:

String[] array = new String[3]; 

は、サイズ3の新しい配列を初期化します。配列は固定長です。

+0

あなたのロジックが動作し、最大セットが返されます。 – Bharat

+0

私の質問では、私の意図は、データセットを提供することでした、表現を見ていない。あなたの提案をありがとう、私は今後も注意します。 – Bharat

+0

@Bharatそれを聞いて幸せ - ほとんどの時、人々はGuavaを知らない... – xenteros

関連する問題