回答
我想這取決於你要找的序列有多長。
我要做的是使用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();
}
而關於性能:這種測試方法需要大約一秒鐘我的機器上無限長度約25毫秒,當我限制樣長度到12個字符
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位數字。使用這種方法,你不需要做更長的字符串。特別是如果字符串是隨機的。 ;) –
@彼得我知道,但是你應該怎麼處理這些規範? :-) –
+1:一個有趣的解決方案和努力。恕我直言,它唯一有意義的比較相同長度的字符串。 –
對於一個給定長度的數字,你可以把所有的數據放在一個ArrayList中,對它們進行排序並計算重複次數(它們將彼此相鄰)。總是少於1000個條目。
- 1. 查找字符串列表中的常見字符串
- 2. 使用SQL在列中查找常見子字符串
- 3. 查找常見字符串中的字符串(紅寶石)的陣列
- 4. 查找字符串中的常見字符
- 5. 查找字符串中的常見字符
- 6. 查找最常見的對字符的字符串中的
- 7. 查找在多個字符串中發生的常見文本
- 8. 在SQLite中查找最常見的字符串
- 9. 在字符串中查找字符串的子序列
- 10. 如何在字符串中找到最常見的字符
- 11. 查找字符串中最常見的子字符串的算法
- 12. 查找ArrayList中最常見的字符串 - 當前返回null
- 13. Ruby:查找字符串數組中的最常見短語
- 14. 查找ArrayList中最常見的字符串
- 15. 使用Javascript來查找字符串中最常見的單詞?
- 16. 預編譯函數在字符串中查找字符序列?
- 17. c#查找列表中的所有常見子字符串<string>
- 18. 在字符串中查找字符串
- 19. 在字符串中查找字符串
- 20. 如何在兩個字符串中找到常見子字符串
- 21. 查找大字符串的子序列
- 22. 查找多個常見起始字符串
- 23. 在字符串中查找第一個數字序列?
- 24. 查找字符串中的字符序列
- 25. 查找字符串中的字符序列
- 26. C程序在字符串中查找子字符串
- 27. 查找python中兩個字符串的所有常見連續子串
- 28. 使用for循環查找兩個字符串中的常見字母
- 29. 在字符串中查找字符
- 30. 找到給定的兩個字符串的所有常見子序列
「1111」的結果是什麼? –
我認爲1x 1111,2x111,3x11。但這並不重要,我只需要找到最常見的序列。 – Veriton