#python-3.x #longest-substring
Вопрос:
Я пытался получить результат ниже из этой программы, но по какой-то причине она не дает требуемого результата.
Требуемые Результаты:
Input1 : bbaasssrppoccbaaacbaba Output1 : ['bbaa','sssrppoccbaaa','cba','ba']
Input2: hjgAvjhjKLhbfvbZSF Output2 :['h', 'jgA', 'vjh', 'jK', 'L', 'hb', 'f','vbZSF']
Что я получаю
Output: ['bbaa', 'sssrppoccbaaa', 'cba']
amp; Output: ['h', 'jgA', 'vjh', 'jK', 'L', 'hb', 'f']
снизу код, который не получает последнюю подстроку "ba" amp; "vbZSF"
.
s1 = 'bbaasssrppoccbaaacbaba'
# s1 = 'hjgAvjhjKLhbfvbZSF'
decSub = ''
listSub = []
i= 0
while i < len(s1):
current = s1[i]
previous = s1[i] if i == 0 else s1[i-1]
if ord(current) <= ord(previous):
decSub = current
else:
listSub.append(decSub)
decSub = ''
decSub = current
i =1
print(listSub)
Было бы здорово, если бы кто-нибудь мог предложить исправление или лучший способ достижения этого результата.Заранее спасибо
Ответ №1:
Вам просто нужно добавить недостающее decSub
в список.
Обновленный Код:
s1 = 'bbaasssrppoccbaaacbaba'
# s1 = 'hjgAvjhjKLhbfvbZSF'
decSub = ''
listSub = []
i= 0
while i < len(s1):
current = s1[i]
previous = s1[i] if i == 0 else s1[i-1]
if ord(current) <= ord(previous):
decSub = current
else:
listSub.append(decSub)
decSub = ''
decSub = current
i = 1
listSub.append(decSub)
print(listSub)
Выход:
# s1 = 'bbaasssrppoccbaaacbaba'
['bbaa', 'sssrppoccbaaa', 'cba', 'ba']
# s1 = 'hjgAvjhjKLhbfvbZSF'
['h', 'jgA', 'vjh', 'jK', 'L', 'hb', 'f', 'vbZSF']
Комментарии:
1. Если это решит вашу проблему, пожалуйста, примите этот ответ и поднимите голос. 🙂
Ответ №2:
while
цикл — лучший выбор для итераций без произвольных границ-в вашем случае for
цикл, вероятно, является лучшим выбором.
Вместо этого попробуйте выполнить следующее:
from typing import List
def split_special(txt: str) -> List[str]:
if len(txt) == 0:
return []
res = [txt[0]]
prev = ord(txt[0])
for l in map(ord, txt[1:]):
if prev >= l:
res[-1] = chr(l)
else:
res.append(chr(l))
prev = l
return res
Выходы:
>>> print(Input1)
bbaasssrppoccbaaacbaba
>>> print(split_special(Input1))
['bbaa', 'sssrppoccbaaa', 'cba', 'ba']
>>> print(Input2)
hjgAvjhjKLhbfvbZSF
>>> print(split_special(Input2))
['h', 'jgA', 'vjh', 'jK', 'L', 'hb', 'f', 'vbZSF']
Комментарии:
1. Спасибо @Grzegorz, это более изысканно.