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

C++で文字列から最も長い偶数長の単語を検索する方法

問題の概要

この問題では、スペースで区切られた複数の単語を含む文字列 str が与えられます。私たちのタスクは、文字列の中から最初に見つかる、最も長い偶数長の単語を検索することです。

言い換えると、長さが最大で、かつ文字数が偶数になっている単語(スペースとスペースの間にある文字列)を抜き出す必要があります。

具体例で問題を確認してみましょう。

Input : str = "learn programming at TutorialsPoint"
Output : TutorialsPoint

説明

偶数の長さを持つ単語は「TutorialsPoint」です。

解決アプローチ

この問題に対するシンプルな解決策は、文字列を先頭から走査しながら、「これまでに記録した最長単語よりも長い偶数長の単語」を順次探していくというものです。あらかじめ最長単語の長さ(maxWordLen)を 0 で初期化しておきます。

アルゴリズム

ステップ 1 − 文字列を先頭から順に走査します。

ステップ 2 − 現在の単語の長さが偶数であり、かつ直前に記録した最長単語より長いかどうかをチェックします。

ステップ 3 − 条件を満たす中で最も長い単語を返します。

C++での実装例

以下は、このソリューションの動作を示すサンプルプログラムです。

#include <bits/stdc++.h>
using namespace std;
string findMaxEvenLenWord(string str) {
    int len = str.length();
    int i = 0; int currWordlen = 0;
    int maxWordLen = 0;
    int stringPointer = -1;
    while (i < len) {
        if (str[i] == ' ') {
            if (currWordlen % 2 == 0) {
                if (maxWordLen < currWordlen) {
                    maxWordLen = currWordlen;
                    stringPointer = i - currWordlen;
                }
            }
            currWordlen = 0;
        }
        else {
            currWordlen++;
        }
        i++;
    }
    if (currWordlen % 2 == 0) {
        if (maxWordLen < currWordlen) {
            maxWordLen = currWordlen;
            stringPointer = i - currWordlen;
        }
    }
    if (stringPointer == -1)
        return "Not Found!";
    return str.substr(stringPointer, maxWordLen);
}
int main() {
   string str = "Learn programming at Tutorialspoint";
   cout<<"The maximum length even word is '"<<findMaxEvenLenWord(str)<<"'";
   return 0;
}

実行結果

The maximum length even word is 'Tutorialspoint'

計算量

このアルゴリズムは文字列全体を一度だけ走査するため、時間計算量は O(n) となります(n は文字列の長さ)。また、追加のメモリとしては定数個の変数しか使用しないため、補助空間計算量は O(1) です。


  1. C++で文字列内の最初に繰り返される単語を検索する方法

    この問題では、スペースで区切られた複数の単語からなる文字列 str が与えられます。私たちのタスクは、文字列の中で最初に繰り返し出現する単語を見つけることです。つまり、「2つのスペースに挟まれた単語」の中から、文字列内で重複して現れる最初のものを特定する必要があります。問題を理解するための例入力 : str = C program are easy to program 出力 : program解決アプローチこの問題に対するシンプルな解決策は、ハッシュマップ(unordered_map)というデータ構造を利用することです。まず、文字列を単語ごとに分割しながら読み込み、各単語とその出現回数をハッ

  2. C++でN番目の偶数長回文数を求める方法をわかりやすく解説

    C++を使ったことがある人なら、「回文(パリンドローム)」という言葉を耳にしたことがあるでしょう。この記事では、「N番目の偶数長回文数」について、具体例を交えながらすべて解説します。 回文とは、逆から読んでも元と同じになる数字や単語のことです。数字だけでなく、文字を反転してもつづりが変わらない単語も回文と呼ばれます。例えば以下の通りです。 数字 = {1, 121, 131, 656, 1221, 1551} 単語 = {saas, malayalam, level, mom} 一見複雑に見えますが、実際にプログラムで実装すると非常にシンプルです。それでは、回文について詳しく見ていきましょう。