Этот алгоритм, который я написал, чтобы проверить, является ли одна строка префиксом для другой строки в массиве. Сложность O (n * (n-1) * k), где n - количество строк в массиве, и K - наибольшая длина строки. Я здесь, в анализе сложности?Временная сложность поиска этого префикса
public static void isPrefix(String[] strs){
for(int i=0; i<strs.length; i++){
for(int j=i+1; j<strs.length; j++){
String a = strs[i];
String b = strs[j];
if(!commonStr(a,b).isEmpty()){
System.out.println(a + "->" + b);
}
}
}
}
private static String commonStr(String a, String b){
int smaller = Math.min(a.length(), b.length());
for(int k=0; k<smaller; k++){
if(a.charAt(k) != b.charAt(k)){
return "";
}
}
return a.substring(0,smaller);
}
public static void main(String[] args){
String[] strs = {"ab", "abc", "cde", "abef"};
isPrefix(strs);
}
Может быть, это глупый вопрос (и полностью отключен от темы), но почему бы не использовать startsWith? – MrP
Если вы добавляете или удаляете слова из своего массива и хотите многократно проверять префиксы, возможно, вам стоит рассмотреть возможность использования другой структуры данных, например, Trie: http://en.wikipedia.org/wiki/Trie – Traklon
Да, попытки лучше, но для анализа BigO только – user697911