この挑戦では、あなたの仕事は、与えられた構造を持つ部分文字列を見つけることです。
入力
入力は、空ではない2つの英数字文字列、パターン p
、およびテキスト t
です。の考え方は、の各文字がp
連続して空でない部分文字列を表し、その部分文字列t
が隣り合って出現し、p
それらの連結を表すことです。同一の文字は同一の部分文字列に対応します。たとえば、パターンaa
は空でない正方形(短い文字列をそれ自体に連結することによって取得される文字列)を表します。したがって、パターンaa
は部分文字列byebye
とa
一致し、それぞれ一致しbye
ます。
出力
テキストt
にp
一致する部分文字列が含まれている場合、出力はその部分文字列になり、の文字に:
対応する文字列の間にコロンが挿入されますp
。例えば、我々が持っている場合t = byebyenow
とp = aa
、その後、bye:bye
許容出力されます。一致する部分文字列にはいくつかの選択肢がありますが、そのうちの1つだけを出力します。
t
一致する部分文字列が含まれていない場合、出力は悲しい顔になり:(
ます。
規則と説明
の異なる文字はp
同一の部分文字列に対応できるためp = aba
、文字列と一致できますAAA
。文字は空でない文字列に対応する必要があることに注意してください。特に、p
がより長い場合t
、出力はでなければなりません:(
。
完全なプログラムまたは関数を記述できます。また、2つの入力の順序を変更することもできます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。
テストケース
形式で与えられますpattern text -> output
。他の受け入れ可能な出力が存在する可能性があることに注意してください。
a Not -> N
aa Not -> :(
abcd Not -> :(
aaa rerere -> re:re:re
xx ABAAAB -> A:A
MMM ABABBAABBAABBA -> ABBA:ABBA:ABBA
x33x 10100110011001 -> 10:1001:1001:10
abcacb 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> c:a0aa:0c:c:0c:a0aa
abccab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> a:a:0c0:0c0:a:a
abcbcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> :(
abcbdcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> 00:c:ca0aa0c:c:0:ca0aa0c:00:c
O(2^((n * (n + 1))/2))
:P