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

C++で文字列の最後の単語の長さを求める方法

問題概要

文字列 s が与えられます。s には英字と空白が含まれます。このとき、文字列に含まれる最後の単語の長さを求める必要があります。最後の単語が存在しない場合は 0 を返します。

たとえば、入力が「I love Programming」の場合、最後の単語は「Programming」なので、出力は 11 となります。

解法のアプローチ

この問題は、stringstream を使って文字列を単語ごとに分割し、最後に読み取った単語の長さを記録することで解けます。手順は以下の通りです。

  • 変数 n を 0 で初期化します。
  • stringstream を使って文字列から単語を順番に読み込みます。
  • 各単語 temp を読み込むたびに、n を temp のサイズ(長さ)で更新します。
  • ループが終了した時点の n を返します。これが最後の単語の長さになります。

ストリームからの抽出演算子 >> は自動的に空白区切りで単語を読み込んでくれるため、余分な空白を気にせずシンプルに実装できるのがポイントです。

実装例

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    int lengthOfLastWord(string s){
        stringstream str(s);
        string temp;
        int n = 0;
        while (str >> temp)
            n = temp.size();
        return n;
    }
};
main(){
    Solution ob;
    cout << (ob.lengthOfLastWord("I love Programming"));
}

入力

"I love Programming"

出力

11

補足:末尾から走査する効率的な別解

stringstream を使わずに、文字列の末尾から走査する方法もあります。まず末尾の空白をスキップし、その後空白または文字列の先頭に到達するまで文字数を数えることで、追加メモリほぼゼロで効率的に求められます。

int lengthOfLastWord(string s) {
    int i = s.size() - 1;
    while (i >= 0 && s[i] == ' ') i--; // 末尾の空白をスキップ
    int len = 0;
    while (i >= 0 && s[i] != ' ') {   // 最後の単語をカウント
        len++;
        i--;
    }
    return len;
}

この方法なら文字列全体を単語に分割する必要がないため、非常に長い文字列でも高速に動作します。計算量は O(n)、空間計算量は O(1) です。

  1. PHPで文字列の最後の単語の長さを取得する方法

    文字列の中で最後の単語の長さを求めたい場合、PHPの組み込み文字列関数を組み合わせることで簡単に実装できます。ここでは、「strrpos」「substr」「strlen」の3つの関数を使ったサンプルコードと、その仕組みをわかりやすく解説します。 サンプルコード <?php     function last_word_len($my_string){         $position = strrpos($my_string, ' ');  

  2. Pythonで文字列の最後の単語の長さを求める方法

    文字列の中で最後の単語の長さを求めたい場合、まず文字列から余分な空白を取り除き、先頭から1文字ずつ走査するメソッドを定義します。走査を進めながら単語の長さを数え、最終的に最後の単語の長さを結果として返します。サンプルコード以下に具体的な実装例を示します。def last_word_length(my_string): init_val = 0 processed_str = my_string.strip() for i in range(len(processed_str)): if processed_str[i] == : init_