「問題 1 : 一致する接頭辞と接尾辞 1 PHP編(paizaランク C 相当)」をやってみた。MP・KMPというもの(?)らしいが、それがなんだか現時点では不明。
ある文字列の接頭辞と接尾辞を比較して最長の文字列数を出力する。
接頭辞や接尾辞の文字数は、0から文字数-1の範囲。(接頭辞や接尾辞と言うには、結構長いものになる可能性がある)
コード例↓
<?php
$a = trim(fgets(STDIN)); // 文字数
$b = trim(fgets(STDIN)); // 文字列
// test用
// $a = 11;
// $b = "abracadabra";
// 接頭辞と接尾辞のリスト
$a1 = [];
$a2 = [];
$ad = $a;
$c = 0;
// 接頭辞の取得
for($i = 0; $i < $a; $i++){
$a1[$i] = substr($b, 0, $i);
}
for($i = 0; $i < $a; $i++){
$a2[$i] = substr($b, $ad, $i);
$ad--;
}
// echo print_r($a1, true);
// echo print_r($a2, true);
for($i = 0; $i < $a; $i++){
if($a1[$i] === $a2[$i]){
$c = $i;
}
}
echo $c;
文字数11で文字列が”abracadabra”の時、文字数最長でマッチするのはabraの4文字のため、結果は4になる。


コメント