-3
我收到了String(目錄路徑)的集合。 如何獲得所有字符串的最長公共前綴?Java String-Collection:最長的公共前綴
實施例: [ 「E:/用戶/測試」, 「E:/用戶/測試/ ABC /」, 「C:/方案」, 「E:/數據」, 「/測試」]
該解決方案必須比: [ 「E:/」, 「C:/程序」, 「/測試」]
我不知道如何實現這...
感謝你的幫助, 問候
我收到了String(目錄路徑)的集合。 如何獲得所有字符串的最長公共前綴?Java String-Collection:最長的公共前綴
實施例: [ 「E:/用戶/測試」, 「E:/用戶/測試/ ABC /」, 「C:/方案」, 「E:/數據」, 「/測試」]
該解決方案必須比: [ 「E:/」, 「C:/程序」, 「/測試」]
我不知道如何實現這...
感謝你的幫助, 問候
既不漂亮也不快,但似乎工作:
public List<String> longestCommonPrefixes(Collection<String> c) {
List<String> list = new ArrayList<>(c);
List<String> result = new ArrayList<>();
while (!list.isEmpty()) {
String lcp = longestCommonPrefix(list);
result.add(lcp);
for (Iterator<String> it = list.iterator(); it.hasNext();) {
if (it.next().startsWith(lcp)) {
it.remove();
}
}
}
return result;
}
private String longestCommonPrefix(List<String> list) {
Map<Character, Integer> map = new HashMap<>();
for (String s : list) {
char c = s.charAt(0);
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
char c = 0;
int max = 0;
for (Map.Entry<Character, Integer> e : map.entrySet()) {
int n = e.getValue();
if (n > max) {
max = n;
c = e.getKey();
} else if (n == max) {
c = 0;
}
}
if (c == 0) {
int maxLen = 0;
String sMaxLen = null;
for (String s : list) {
if (s.length() > maxLen) {
maxLen = s.length();
sMaxLen = s;
} else if (s.length() == maxLen) {
sMaxLen = null;
}
}
return sMaxLen;
} else {
String s = null;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).charAt(0) == c) {
s = list.get(i);
for (int j = i + 1; j < list.size(); j++) {
String s2 = list.get(j);
if (s2.charAt(0) != c) {
continue;
}
if (s.length() > s2.length()) {
s = s.substring(0, s2.length());
}
for (int k = 0; k < s.length(); k++) {
if (s.charAt(k) != s2.charAt(k)) {
s = s.substring(0, k);
break;
}
}
}
break;
}
}
return s;
}
}
創建一個字符串數組。瀏覽http://docs.oracle.com/javase/7/docs/api/java/lang/String.html。寫一些代碼。 – Touchstone 2015-03-31 10:20:57
所有這些字符串中最長的公共前綴是「」。 – 2015-03-31 10:21:08
首先看哪個是最常見的第一個字符。然後檢查下列字符是否匹配,如果匹配,則添加它們。然後對沒有以最常見的那個開始的那些做同樣的事情......並且繼續下去,直到沒有Strings離開。 – Bubletan 2015-03-31 10:39:51