소개
이 도전에서, 당신의 임무는 문자열의 일반화 된 하위 시퀀스를 찾는 것입니다. 서브 시퀀스가 반드시 연속적인 것은 아니며, 스트링의 끝을지나 처음부터 다시 시작하여 스트링을 "감쌀"수도 있습니다. 그러나 랩 수를 최소화하고 싶을 것입니다.
더 공식적으로하자 u
및 v
두 문자열 및 수 k ≥ 0
의 정수. 우리는 말 u
A는 k
-wrapping 서브 의 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
를 한 번 선택한 다음 다시 쓸 수 없으므로 두 번째 스윕에서 무시되는 방식에 유의하십시오 . 그러나 랩 어라운드가 2 개인 짧은 방법이 있습니다.
yxzzazzyxxxyz
>──────────xyz┐
┌─────────────┘
└yxzz────x────┐
┌─────────────┘
└───────y─x───>
하나의 랩 어라운드 (즉, 두 개의 스윕)로는 충분하지 않으므로 올바른 출력은 2
입니다.
규칙 및 보너스
함수 또는 전체 프로그램을 작성할 수 있으며 필요한 경우 입력 순서를 변경할 수도 있습니다. 가장 낮은 바이트 수가 이기고 표준 허점이 허용되지 않습니다.
총 10 초 이내에 모든 테스트 사례를 계산할 때 보너스가 -10 % 입니다. 내 컴퓨터에서 불분명 한 사례를 테스트합니다. 파이썬에서 내 레퍼런스 구현은 약 0.6 초가 걸립니다. 1.86GHz 듀얼 코어 CPU가 장착 된 7 세짜리 랩톱이 있습니다.
테스트 사례
"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
는 세 개의 다른 스위프에서 사용 되므로 유효하지 않습니다 . 한 번만 사용할 수 있습니다.