答えて
私は、あなたが探している順序がどれくらいあるかによって決まると思います。
Guava Multiset
を使用してシーケンスを反復し、すべてのサブシーケンスをMultisetに書き込み、オカレンスでソートします。ここではサンプル実装です:
public static String getMostFrequentSequence(final String input, final int patternLength) {
final Multiset<String> multiset = HashMultiset.create();
final int length = patternLength < 0 ? input.length() : Math.min(patternLength, input.length());
for (int l = 2; l < length; l++) {
for (int o = 0; o < input.length() - l; o++) {
multiset.add(input.substring(o, o + l));
}
}
return Ordering.from(new Comparator<Entry<String>>() {
public int compare(final Entry<String> o1, final Entry<String> o2) {
return
ComparisonChain.start()
.compare(o1.getCount(), o2.getCount())
.compare(o1.getElement(), o2.getElement())
.result();
}
}).max(multiset.entrySet()).getElement();
}
とパフォーマンスについて:私は
public static void main(final String[] args) throws Exception {
final StringBuilder sb = new StringBuilder();
final Random random = new Random();
for (int i = 0; i < 1000; i++) {
sb.append(random.nextInt(10));
}
final long t1 = System.currentTimeMillis();
final String input = sb.toString();
System.out.println(input);
System.out.println(getMostFrequentSequence(input, -1));
System.out.println(System.currentTimeMillis() - t1);
final long t2 = System.currentTimeMillis();
System.out.println(getMostFrequentSequence(input, 12));
System.out.println(System.currentTimeMillis() - t2);
}
私は最高のカウントが2桁の数字であると思います。この方法を使用すると、長い文字列を使用する必要はありません。文字列がランダムである場合はesp。 ;) –
@Peter私は知っていますが、これらのように曖昧な仕様で何をすべきですか? :-) –
+1:面白い解決策と努力のために。 IMHOは、同じ長さの文字列を比較する唯一の意味があります。 –
12文字までのパターンの長さを制限する場合は、この試験方法は、無制限の長さのための私のマシン上秒〜約25ミリ秒程度かかり与えられた長さの数字をArrayListに入れ、ソートして重複数を数えます(それらは互いに隣り合っています)。
- 1. SQLiteで最も一般的な文字列を見つける
- 2. 最も一般的な部分文字列を見つける一般的なサフィックスツリートラバーサル
- 3. Ruby:文字列の中で最も一般的なフレーズを見つけよう
- 4. 一般的な配列メソッド、整数、文字列、文字で最大の要素を見つける
- 5. どのように再帰的に一連の文字列の一般的なルートを見つけるには?
- 6. 単語リストの中で最も一般的な文字を見つける
- 7. 文字列内の不明な文字列を見つける
- 8. ヒストグラムを使用して配列内の最も一般的な文字を見つけよう
- 9. 一般的に文字列
- 10. Python:最も一般的な文字列を見つける最も効率的な方法
- 11. 一般的な文字列パーサ
- 12. 一般的な電子メールクライアントユーザエージェント文字列
- 13. 文字列コレクション内で最も同一の文字列を見つける
- 14. 配列内の数字のシーケンスを見つける
- 15. 文字列のシーケンスのギャップを見つける
- 16. テキスト内で最も一般的な5つの単語を見つける
- 17. メモリリークを見つける手助け(一般的なヒント)
- 18. 文字列内の文字列を見つける
- 19. REGEXは文字列内の文字列を見つける
- 20. forループ内のリスト内の最も一般的なオブジェクトを見つけよう
- 21. 画像の最も一般的な色を見つける
- 22. 一般的な大きさの相似数を見つける
- 23. 文字列内の文字の位置を見つける
- 24. 文字列内の文字のインデックスを見つける
- 25. Cの文字列内の文字を見つける
- 26. 文章中の単語が終わる最も一般的な文字を見つける機能
- 27. 文字列内の@文字を見つける
- 28. リスト内の文字列から文字を見つける
- 29. 文字列を一般的な列挙型に変換する
- 30. 最も一般的な要素を見つける
"1111"の結果は何ですか? –
私は1x1111,2x113、3x11と思います。しかし、それは本当に問題ではない、私は最も一般的なシーケンスを見つける必要があります。 – Veriton