C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で文字列内のセグメント数を数える方法

問題概要

文字列 s が与えられたとき、その文字列に含まれる「セグメント」の数を数えます。ここでセグメントとは、空白文字を含まない連続した文字の並びのことを指します。

たとえば、入力が "Hello, I love programming" の場合、セグメントは4つ存在するため、出力は4になります。

解法のアプローチ

この問題は、以下の手順で解くことができます。

  • カウンタ n を 0 で初期化します。
  • i を 0 から文字列の長さ未満まで1ずつ増やしながらループ処理を行います。
    • s[i] が空白でない場合、n を1増やします(新しいセグメントの開始を検出)。
    • その後、i が文字列の範囲内であり、かつ s[i] が空白でない間、i を進めます(現在のセグメントの残りを読み飛ばす)。
  • 最後に n を返します。

アルゴリズムのポイント

このアルゴリズムでは、空白以外の文字が出現した時点で「新しいセグメントの始まり」と判断し、カウントを1つ増やします。その直後に、そのセグメントの残りの部分を一気に読み飛ばすことで、同じセグメントを二重にカウントしてしまうことを防いでいます。

文字列を一度だけ走査すればよいため、時間計算量は O(n)、必要な追加メモリは O(1) と非常に効率的です。

C++での実装例

理解を深めるために、以下の実装例を見てみましょう。

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    int countSegments(string s) {
        int n = 0;
        for(int i = 0; i < s.size(); i++){
            if(s[i] != ' ')
                n++;
            while( i < s.size() && s[i] != ' ')
                i++;
        }
        return n;
    }
};
main(){
    Solution ob;
    cout << (ob.countSegments("Hello, I love programming"));
}

入力

"Hello, I love programming"

出力

4
  1. C++で質素数(Frugal Number)を判定する方法【サンプルコード付き】

    この記事では、正の整数 N が与えられたときに、その数が質素数(Frugal Number)であるかどうかを判定するプログラムを C++ で作成する方法を解説します。 質素数とは? 質素数(FRUGAL NUMBER)とは、その数自身の桁数が、素因数分解による表現の桁数よりも厳密に大きい数のことです。 例:625 の場合 625 を素因数分解すると 54 となります。 625 自身の桁数:3 桁 54 の表現の桁数:2 桁 3 は 2 よりも厳密に大きいため、625 は質素数です。 最初のいくつかの質素数:125、128、243、256、343、512、625 など 問題を理解するための具

  2. C++で五胞体数(ペンタトープ数)を求める方法

    五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の