Вступ
У цьому завданні ваше завдання - знайти узагальнені підрядки рядків. Підстави не обов'язково суміжні, і вони також можуть «обернути» струну, проходячи повз її кінець і починаючи знову від початку. Хоча ви хочете мінімізувати кількість обгортань.
Більш офіційно, нехай u
і v
будуть будь-які два рядки та k ≥ 0
ціле число. Ми говоримо, що u
це - k
обертаюча подальша кількість v
, якщо існують окремі індекси, такі, що задовольняють , і в більшості випадків . Це означає, що можна знайти всередині , перейшовши зліва направо, вибравши деяких своїх персонажів по дорозі і обертаючись навколо (як рівно, виконуючи максимум поперек ). Зауважте, що жоден символ не може бути обраний не один раз, навіть після завершення обертання, і що загортання послідовностей - це саме ті звичайні послідовності, з якими ми всі знайомі.i1, i2, ..., ilen(u)
u == v[i1] v[i2] ... v[ilen(u)]
k
ij
ij > ij+1
u
v
k
k+1
v
0
Завдання
Ваші входи - це дві непусті буквено-цифрові рядки u
і v
, а ваш вихід є найменшим цілим числом, k
таким, що u
є k
обертанням послідовності v
. Якщо такого не k
існує, вихід повинен бути -1
.
Приклад
Розглянемо вхідні дані u := xyzyxzzxyx
та v := yxzzazzyxxxyz
. Якщо ми починаємо шукати герой u
в v
в жадібної моді, ми будемо обернути навколо 3 рази:
yxzzazzyxxxyz
>─x─────y────z┐
┌─────────────┘
└y───────x────┐
┌─────────────┘
└──zz─────x─y─┐
┌─────────────┘
└──────────x──>
Таким чином, правильний вихід становить щонайбільше 3. Зверніть увагу на те, як найбільше лівого символу x
вибирається один раз, а потім ігнорується під час другого розгортання, оскільки його неможливо повторно використовувати. Однак існує більш короткий метод із лише двома обгортками:
yxzzazzyxxxyz
>──────────xyz┐
┌─────────────┘
└yxzz────x────┐
┌─────────────┘
└───────y─x───>
Виявляється, одного обертання (тобто двох розгортків) недостатньо, тому правильний вихід є 2
.
Правила та бонуси
Ви можете написати або функцію, або повну програму, а також можете змінити порядок входів, якщо потрібно. Виграє найменший байт, а стандартні лазівки заборонені.
Існує бонус у розмірі -10% за обчислення всіх тестових випадків за загалом менше 10 секунд. Я перевірю незрозумілі випадки на своїй машині; моя реалізація в Python займає приблизно 0,6 секунди. У мене 7-річний ноутбук з двоядерним процесором 1,86 ГГц, який ви можете взяти до уваги.
Випробування
"me" "moe" -> 0
"meet" "metro" -> -1
"ababa" "abaab" -> 1
"abaab" "baabaa" -> 1
"1c1C1C2B" "1111CCCcB2" -> 3
"reverse" "reserved" -> 2
"abcdefg" "gfedcba" -> 6
"xyzyxzzxyx" "yxzzazzyxxxyz" -> 2
"aasdffdaasdf" "asdfddasdfsdaafsds" -> 2
x
використовується в трьох різних розгортаннях. Його можна використовувати лише один раз.