Вывести наименьшее Y, при котором возможно получить Z [требует правки]

186
28 января 2018, 02:36

Есть задача. Мы можем делать следующие действия:

1) На вводе дана строка X(мы можем её допечатать)

2) Один раз дописать строку Y

3) Отбросить N символов с начала строки.

На вводе дана строка Z Нужно вывести наименьшее Y, при котором возможно получить Z(если необязательно выполнять действие 2) не вывести ничего). Подскажите идею для решения, заранее спасибо.

Answer 1

Условие: Дано строки 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).

READ ALSO
Переход на другую активность

Переход на другую активность

Есть код, который передает отмеченные позиции в listView в другую активность:

250
из UTF-8 в windows-1251

из UTF-8 в windows-1251

Буду кратокОдна из проблем в моем сокет приложении на ява решилось тем что я кодировку исходного файла поменял с UTF-8 на windows-1251

263
как передать Arraylist с помощью MimeMessage

как передать Arraylist с помощью MimeMessage

Необходимо передать на почту с помощью MimeMessage Arraylist, в котором находятся экземпляры класса, чтобы в письме выводились данные Arraylist в строку...

198
Как создать нейронную сеть с помощью библиотеки fann?

Как создать нейронную сеть с помощью библиотеки fann?

В интернете искал инфу по поводу этой библы, для java документации ноль (скорей всего я плохо искал)

258