Вступ
У цьому завданні ваше завдання - знайти узагальнені підрядки рядків. Підстави не обов'язково суміжні, і вони також можуть «обернути» струну, проходячи повз її кінець і починаючи знову від початку. Хоча ви хочете мінімізувати кількість обгортань.
Більш офіційно, нехай uі vбудуть будь-які два рядки та k ≥ 0ціле число. Ми говоримо, що uце - kобертаюча подальша кількість v, якщо існують окремі індекси, такі, що задовольняють , і в більшості випадків . Це означає, що можна знайти всередині , перейшовши зліва направо, вибравши деяких своїх персонажів по дорозі і обертаючись навколо (як рівно, виконуючи максимум поперек ). Зауважте, що жоден символ не може бути обраний не один раз, навіть після завершення обертання, і що загортання послідовностей - це саме ті звичайні послідовності, з якими ми всі знайомі.i1, i2, ..., ilen(u)u == v[i1] v[i2] ... v[ilen(u)]kijij > ij+1uvkk+1v0
Завдання
Ваші входи - це дві непусті буквено-цифрові рядки 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використовується в трьох різних розгортаннях. Його можна використовувати лише один раз.