Редактировать: для уточненного вопроса:
- Сортировка строк
- Найдите самый длинный общий префикс каждой соседней пары
- Сортировка и дедупликация общих префиксов, затем удаление любых, являющихся строгими префиксами другого.
На самом деле, для шага (3) требуется только удалить все, что является дублированием / префиксом другого, что вы можете сделать с помощью дерева или чего-то другого вместо сортировки. Фактически может случиться так, что все это может быть сделано быстрее с соответствующим аннотированным обозначением - если вы включаете «count» для каждого узла, то вы точно ищете узлы с числом 2+, у которых нет дочерних элементов с количество 2 +.
Но сортировка встроена, и после сортировки вы можете определять префиксы, просматривая соседние элементы, так что это, вероятно, меньше усилий.
[Оригинальный ответ:
Просто одноразовая операция, найти самый длинный общий префикс среди всех строк?
Я бы, наверное, сделал это с точки зрения длины префикса. В псевдокоде и в предположении, что строки с нулевым символом в конце:
prefixlen = strlen(first_string);
foreach string in the list {
for (i = 0; i < prefixlen; ++i) {
if (string[i] != first_string[i]) {
prefixlen = i;
break;
}
}
if (prefixlen == 0) break;
}
common_prefix = substring(firststring, 0, prefixlen);
* * Тысяча двадцать-одиной]