Meiryo’s blog

やってみて詰まったことを備忘録として残すブログ

【C#】文字列に単語が何個あるかカウントする

こないだのAtCoderで「割とこういうの出るけど出る度考えてる気がする」
ってのがあったので改善することに。
問題はこれです。
B - Count ABC

文字列の中に単語があったらカウントする、ってやつですね。
コンテストではこんなコードで通しました。

            for(var i = 0; i<s.Length - 2; i++)
            {
               if(s[i] == 'A')
                {
                    if(s[i + 1] == 'B')
                    {
                        if (s[i + 2] == 'C')
                        {
                            count++;
                        }
                    }
                }
            }
            Console.WriteLine(count);

通ったはいいんですけどネスト深いしなんかダサいし・・・
こいつをいい感じにしたいと思い、解説放送を見てきました。
それで出来上がったのがこちらのメソッド

        public int CountContainWords(string source, string word)
        {
            var count = 0;
            var loopCount = source.Length - (word.Length - 1);
            for (var i = 0; i < loopCount; i++)
            {
                if (source.Substring(i, word.Length) == word)
                {
                    count++;
                }
            }
            return count;
        }

凄いスッキリしました。