ちょっと悩みました。結局構造として、
- 指定された文字列が「最初に」出現した場所をつきとめる
- 最初に出現した場所まですっぱりと文字列を削除
- 文字列の残りを同じように判定
- 出現する限りwhile文でまわし、出現回数をカウントする
という感じになっています。
ここまでの問題をすっとばしてfinal問題を解いてしまったので、これでよかったのかどうか。
ご参考になれば。

この問題のきもは「重複している」場合をどうするかですね。
AAAからAAを探すとき、paizaが要求している答えは「2」、
mb_substr_count関数を使ってしまうと答えは「1」になる(はず)
別の方法が必要ということになります。

<?php
// 自分の得意な言語で
// Let's チャレンジ!!
$s = trim(fgets(STDIN));
$str = trim(fgets(STDIN));
$count=0;//reset カウント
while(strpos($str, $s) !== false){
$pos = strpos($str, $s);
$str = mb_substr($str,$pos+1,strlen($str)-$pos);
$count++;
}
echo($count."\n");
?>
文字列内の部分文字列が最初に現れる場所を見つける strpos
https://www.php.net/manual/ja/function.strpos.php
paiza Bランクレベルアップメニュー(PHP編)
https://paiza.jp/works/mondai/prob60/problem_index?language_uid=php
お待ちしております!
1+