บทนำ
ในความท้าทายนี้งานของคุณคือการหาลำดับทั่วไปของสตริง การเรียงลำดับไม่จำเป็นต้องต่อเนื่องกันและพวกเขายังสามารถ "ล้อมรอบ" สตริงได้ผ่านจุดสิ้นสุดและเริ่มต้นอีกครั้งจากจุดเริ่มต้น คุณจะต้องลดจำนวนการตัดให้เหลือน้อยที่สุด
เป็นทางการมากขึ้นให้u
และv
เป็นสองสายใด ๆ และk ≥ 0
จำนวนเต็ม เราบอกว่าu
เป็นk
subsequence -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
subsequence -wrapping 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 วินาทีรวม ฉันจะทดสอบเคสที่ไม่ชัดเจนในเครื่องของฉัน การใช้การอ้างอิงของฉันใน Python ใช้เวลาประมาณ 0.6 วินาที ฉันมีแล็ปท็อปอายุ 7 ปีที่มีซีพียู dual-core 1.86 GHz ซึ่งคุณอาจต้องคำนึงถึง
กรณีทดสอบ
"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
ถูกใช้ในสามเรตติ้งที่แตกต่างกัน สามารถใช้งานได้เพียงครั้งเดียว