Генерировать все подстроки заданной строки

#python #python-3.x #algorithm #substring

#python #python-3.x #алгоритм #подстрока

Вопрос:

Я хочу сгенерировать все возможные подстроки из заданной строки без избыточных значений следующим образом:

ввод: 'abba'

вывод: 'a','b','ab','ba','abb','bba'

Вот мой код

 s='abba' 
for i in range (0,len(s)):
    for j in range (i 1,len(s)):
        print(s[i:j])
  

Мой вывод 'a','ab','abb','b','bb','b'

Как вы можете видеть из вывода 'b' , повторяется и 'bba' не существует.

Я хочу знать и изучать правильную логику для создания всех уникальных подстрок.

Комментарии:

1. Не могли бы вы уточнить, что вы хотите с другой строкой, например abcd ? abba плохой пример, потому ba что на выходе может ссылаться либо на последние две буквы ввода, либо на комбинацию первых двух букв.

2. вот еще один ввод ‘ifailuhkqq’, вывод ‘i’, ‘ifa’,’fai’

Ответ №1:

Немного исправлено индексирование

 s='abba' 
for i in range (0,len(s)):
    for j in range (i,len(s)):
        print(s[i:(j 1)])
  

выдает следующий вывод

 a
ab
abb
abba
b
bb
bba
b
ba
a
  

В принципе, исправление индексации учитывает, что

  • 'abba'[3:3] выдает только строку нулевой длины ''

но

  • 'abba'[3:4] создает строку 'a' длиной один.

Дубликаты, которые вы можете удалить, используя set() , следующим образом:

 s='abba'
ss = set()
for i in range (0,len(s)):
    for j in range (i,len(s)):
        ss.add(s[i:(j 1)])
        
print(sorted(ss))
  

Тогда вы получите следующий результат ['a', 'ab', 'abb', 'abba', 'b', 'ba', 'bb', 'bba'] .

Комментарии:

1. А чтобы удалить дубликаты, добавьте значения в набор.