Привет, я новичок в программировании на python. У меня есть задача, которая требует от меня найти самые длинные подстроки. У меня есть некоторые записанные, которые выводят самую длинную подстроку, но мне нужно, чтобы она выводила две самые длинные подстроки.
def sequences(nums):
pos1=0
pos2=1
seq1=0
seq2=1
while pos2<len(nums):
if nums[pos2] != nums[(pos2-1)]:
if seq2 - seq1 < pos2 - pos1:
seq1, seq2 = pos1, pos2
pos1=pos2
pos2+=1
if seq2 - seq1 < pos2 - pos1:
seq1, seq2 = pos1, pos2
return nums[seq1:seq2]
seq3=sequences
print(seq3('10111000'))`
Например: «10111000» прямо сейчас все, что я получаю, это 111, но я также хотел бы, чтобы он выводил 000, а я пытался найти способ сделать это, но, похоже, не могу его взломать, я был бы очень признателен за вашу помощь Спасибо
Приведите примеры вашего ввода и ожидаемого результата
Если вы хотите вывести все односимвольные подстроки максимальной длины, вам нужно собрать их в список (или какой-либо другой набор элементов). В настоящее время вы просто возвращаете часть входной строки.
Нет, я пытаюсь заставить его выводить две хартии, например, 111 и 000, но я не знаю, как это реализовать в коде.
Ввод: aaabbbabaabb вывод: aaa ожидаемый вывод: aaa bbb я знаю, что я записал, не может вывести то, что я хочу, но именно поэтому я поместил код здесь, чтобы я мог получить указатели, потому что я новичок в кодировании Python, я пытался думать что добавить, чтобы получить ожидаемый результат, мне не удалось
Вы ожидаете, что на выходе будет строка "aaa bbb" или вы ожидаете, что это будут две строки в списке: ["aaa", "bbb"]?
Две строки в списке
Самый простой способ сделать это, вероятно, использовать регулярное выражение для поиска повторяющихся последовательностей всех символов:
import re
def longest_substrings(input: str):
# get all unique characters in the input string
chars = set(input)
# initialise max_length to zero
max_length = 0
# empty list to store output
output = []
# loop over all characters in the string
for c in chars:
# find all substrings of any length
# matching *only* that character
substrings = re.findall(f"{c}+", input)
# loop over all substrings
for substring in substrings:
# check the length of the substring
length = len(substring)
# if longer than the previous max_length,
# we replace the output list with just this
# substring
if length > max_length:
output = [substring, ]
max_length = length
# if length is equal, we add this substring
# to the output
elif length == max_length:
output.append(substring)
# implicitly: if the length is less, we do
# nothing
return output
print(longest_substrings("1100111100111101100100001101"))
# ['1111', '1111', '0000']
F"{c}+" — это шаблон регулярного выражения, который превращается в 0+ вместо 0 и в 1+ вместо 1. + означает match one or more repeating occurrences of this character.
Привет, я пытаюсь заставить его вывести что-то еще, когда оно меньше, но выводит нулевой набор, как мне это изменить
Выводить что вместо этого? Опишите логику, которую вы пытаетесь реализовать.
Я пытаюсь добавить условие, которое говорит, что если длина последовательности меньше 2, она печатает не больше 2, что я сделал, и это работает, так что спасибо
Я хотел бы предложить другое решение, используя groupby:
def longest_substrings(input: str):
substring_generator = ("".join(g) for _, g in groupby(input))
sorted_substrings = sorted(substring_generator, key=lambda x: -len(x))
result = [list(g) for k, g in groupby(sorted_substrings, key=lambda x: len(x))][0]
return result
print(longest_substrings("1100111100111101100100001101"))
Выход: ['1111', '1111', '0000']
В основном, что я делаю здесь, это следующее:
Сначала я группирую входную строку. Это означает, что группы будут создаваться для каждого последовательного похожего элемента, например, 111 или 00. -> substring_generator
Это я сортирую по убыванию по длине строк. -> sorted_substrings
Этот отсортированный список я снова группирую по длинам строк и затем беру из него первый элемент. -> result.
Результат должен быть именно тем, о чем вы просили, и я думаю, что это очень читабельно и понятно, что происходит.
Ваше описание непонятно. Самой длинной подстрокой некоторой строки является сама строка. Но из ваших примеров похоже, что вам нужны только подстроки, состоящие из одного символа. Это верно? Если да, то нужно об этом сказать. Будь понятен.