Есть задача. Мы можем делать следующие действия:
1) На вводе дана строка X(мы можем её допечатать)
2) Один раз дописать строку Y
3) Отбросить N символов с начала строки.
На вводе дана строка Z Нужно вывести наименьшее Y, при котором возможно получить Z(если необязательно выполнять действие 2) не вывести ничего). Подскажите идею для решения, заранее спасибо.
Условие: Дано строки X
, Z
. Найти N
, Y
, такие что: Z == X[N:] + Y
и len(Y)
длина минимально возможная. Вывести Y
строку, если не пустая.
#!/usr/bin/env python3
import sys
X, Z = input(), input()
if not Z: # empty
sys.exit() # nothing to do
i = -1
while True:
i = X.find(Z[0], i+1)
if i == -1: # not found
N, Y = len(X), Z
break
elif Z.startswith(X[i:]): # found min Y
N, Y = i, Z[len(X) - i:]
break
assert Z == X[N:] + Y
if Y:
print(Y)
Пример: Ввод: X, Z = 'abcdef', 'cdefgh'
; результат: Y = 'gh'
:
i
+------+ Y
X |abcdef| ^
+------+ |
+------++
Z |cdef gh|
+-------+
Это простой квадратичный алгоритм: ищем индекс в X
, где началоZ
строки является суффиксом X
. Наименьший такой индекс приводит к наименьшей Y
, так как Y
строка — это конец Z
строки, которая не поместилась в X
. Поэтому, если индекс не найден (-1
), то Y = Z
(наибольший возможный Y
).
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть код, который передает отмеченные позиции в listView в другую активность:
Буду кратокОдна из проблем в моем сокет приложении на ява решилось тем что я кодировку исходного файла поменял с UTF-8 на windows-1251
Необходимо передать на почту с помощью MimeMessage Arraylist, в котором находятся экземпляры класса, чтобы в письме выводились данные Arraylist в строку...
В интернете искал инфу по поводу этой библы, для java документации ноль (скорей всего я плохо искал)