C++で文字列内の最初の繰り返し文字を検索する方法
はじめに
文字列が与えられたとき、その中で最初に繰り返し出現する文字を見つける問題を考えてみましょう。例えば、文字列が「Hello Friends」の場合、最初の繰り返し文字は「l」となります。「l」が2つ連続して出現しているためです。
解決アプローチ:ハッシュテーブルの活用
この問題を効率的に解くには、ハッシュ技法を利用します。手順は以下の通りです。
- 空のハッシュテーブルを作成します。
- 文字列の各文字を先頭から順番に1文字ずつ走査します。
- 現在の文字がハッシュテーブルに存在しない場合は、その文字を挿入します。
- すでに存在する場合は、その文字を答えとして返します。
この手法を使えば、時間計算量O(n)(nは文字列の長さ)で問題を解決できます。
C++での実装例
#include<iostream>
#include<unordered_set>
using namespace std;
char getFirstRepeatingChar(string &s) {
unordered_set<char> hash;
for (int i = 0; i < s.length(); i++) {
char c = s[i];
if (hash.find(c) != hash.end())
return c;
else
hash.insert(c);
}
return '\0';
}
int main() {
string str = "Hello Friends";
cout << "First repeating character is: " << getFirstRepeatingChar(str);
}
実行結果
First repeating character is: l
コードの解説
このプログラムでは、C++標準ライブラリのstd::unordered_setを使用してハッシュセットを実現しています。getFirstRepeatingChar関数の動作は以下の通りです。
hash.find(c)によって、現在の文字cがすでにセット内に存在するかどうかを確認します。- 存在する場合(探索結果が
hash.end()と一致しない場合)、その文字が最初の繰り返し文字であるため、即座に返します。 - 存在しない場合は、
hash.insert(c)でセットに追加し、次の文字へ進みます。
文字列全体を走査しても繰り返し文字が見つからなかった場合は、ヌル文字'\0'を返して処理を終了します。
-
Javaで文字列内の最初に繰り返される単語・文字を検索する方法
Javaを使って、文字列の中に最初に繰り返し現れる単語や文字を見つける方法を解説します。ここではHashSetを活用することで、効率よく重複を検出する手法を紹介します。 サンプルコード import java.util.*; public class Demo{ static char repeat_first(char my_str[]){ HashSet<Character> my_hash = new HashSet<>(); for (int i=0; i<=my_str.length-1; i++){
-
Pythonで文字列内の最初に繰り返される単語を見つける方法
文字列が1つ与えられ、その中で最初に繰り返し出現する単語を見つけるのが本記事のテーマです。この問題を実装する際には、Pythonの標準ライブラリである「collections」モジュールを活用します。collectionsが提供するCounter()クラスを使うことで、各単語の出現回数を簡単に集計できます。 アルゴリズム 処理の手順は以下のとおりです。 与えられた文字列をスペースで区切り、単語のリストに分割します。 単語のリストをCounter(辞書形式)に変換し、各単語の出現回数を集計します。 単語のリストを先頭から順に走査し、出現回数が1より多い最初の単語を特定します。 サンプルコード