paiza Bランクレベルアップメニュー「文字列の重複カウント PHP編」final問題

ちょっと悩みました。結局構造として、

  • 指定された文字列が「最初に」出現した場所をつきとめる
  • 最初に出現した場所まですっぱりと文字列を削除
  • 文字列の残りを同じように判定
  • 出現する限りwhile文でまわし、出現回数をカウントする

という感じになっています。
ここまでの問題をすっとばしてfinal問題を解いてしまったので、これでよかったのかどうか。
ご参考になれば。

kue

この問題のきもは「重複している」場合をどうするかですね。
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+