Giriş
Bu zorlukta, göreviniz dizelerin genel dizilerini bulmaktır. Alt diziler bitişik olmak zorunda değildir ve ayrıca dizeyi "sarabilir", sonuna kadar gidebilir ve baştan başlayarak başlayabilirler. Yine de, sargı sayısını en aza indirmek istersiniz.
Daha resmen izin u
ve v
herhangi iki dizeleri, ve olmayacak k ≥ 0
bir tamsayı. Biz demek u
bir olduğunu k
-paketleme ve dozaj altdizi ait v
farklı indeksleri varsa, öyle ki , en az endeksleri tatmin . Bu, içeriden soldan sağa gidip, bazı karakterlerini yolda seçerek ve en fazla etrafı sararak (eşdeğer olarak, en fazla tarama yaparak ) bulunabileceği anlamına gelir. Bir karakterin, bir etrafa sarılmadan sonra bile bir kereden fazla seçilemeyeceğini ve sarma sarma dizilerinin tam olarak bildiğimiz sıradan diziler olduğunu unutmayın.i1, i2, ..., ilen(u)
u == v[i1] v[i2] ... v[ilen(u)]
k
ij
ij > ij+1
u
v
k
k+1
v
0
Görev
Kişisel girişler iki boş olmayan alfanümerik dizeleri u
ve v
ve çıktı tamsayı küçüğüdür k
böyle u
bir olduğu k
bir -paketleme ve dozaj altdizi v
. Eğer böyle bir şey k
yoksa çıktı alınacaktır -1
.
Misal
Girişleri u := xyzyxzzxyx
ve v := yxzzazzyxxxyz
. Biz karakterler için seyir başlarsa u
içinde v
aç gözlü bir şekilde, biz 3 kez etrafında kaydırılır:
yxzzazzyxxxyz
>─x─────y────z┐
┌─────────────┘
└y───────x────┐
┌─────────────┘
└──zz─────x─y─┐
┌─────────────┘
└──────────x──>
Böylece doğru çıktı en fazla 3 olur. En soldaki karakterin x
bir kez nasıl seçildiğine ve daha sonra tekrar kullanılamayacağından ikinci taramada nasıl yoksayıldığına dikkat edin. Bununla birlikte, sadece 2 sargı ile daha kısa bir yöntem vardır:
yxzzazzyxxxyz
>──────────xyz┐
┌─────────────┘
└yxzz────x────┐
┌─────────────┘
└───────y─x───>
Bir sargı (yani iki tarama) yeterli olmadığı ortaya çıktı, bu yüzden doğru çıktı 2
.
Kurallar ve Bonuslar
Bir işlev veya tam bir program yazabilir ve gerekirse girişlerin sırasını da değiştirebilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez.
Tüm test senaryolarının toplamının 10 saniyenin altında hesaplanması için % -10 bonusu vardır . Makinemdeki belirsiz vakaları test edeceğim; Python'daki referans uygulamam yaklaşık 0,6 saniye sürüyor. Dikkate almak isteyebileceğiniz 1,86 GHz çift çekirdekli CPU'ya sahip 7 yaşında bir dizüstü bilgisayarım var.
Test Durumları
"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
üç ayrı taramada kullanılıyor. Sadece bir kez kullanılabilir.