2014-01-19 3 views
1

Предположим, что у меня есть набор строк. Если строка является подстрокой другой строки, то первая должна быть удалена из набора.Как вычислить минимальное количество максимальных строк?

Моя идея состоит в том, чтобы перебирать все строки в исходном наборе и для каждого строкового теста против других строк в наборе и удалять любую строку, которая является подстрокой других в исходном наборе. Но это приводит к модификации исходного кода на месте, что может вызвать некоторые проблемы в реализации.

Есть ли у кого-нибудь лучшее представление о том, как это должно быть реализовано? Благодарю.

+0

Было бы лучше, если бы вы дать пример ввода/вывода. – Christian

+3

Строки - это последовательности, а не множества, поэтому вам нужно будет определить «подмножество» в этом контексте. –

+3

Вы имеете в виду подмножество или подстроку? – user2357112

ответ

3

Ваш вопрос не очень ясен. Но если я вас правильно понимаю, вы можете сделать что-то вроде этого

l = sorted(["abcd", "abc", "ab", "a"], key = len) 
print [ss for idx, ss in enumerate(l) if all(ss not in cs for cs in l[idx + 1:])] 

Выход

['abcd'] 
+0

Это время выполнения O (n^2). Интересно, будет ли какое-то иерархическое ранжирование быстрее – inspectorG4dget

Смежные вопросы