重複する文字を削除する方法を教えてください
C++で重複文字を削除するには、ハッシュテーブルを使用する方法があります。ハッシュテーブルは、配列または標準ライブラリのunordered_setを使用して実装できます。具体的な手順を以下に示します。
- 文字列内の各文字をループする。
- 現在の文字がハッシュ表にすでに存在しているかどうかを確認する。
- まだハッシュ表にない文字ならハッシュ表に追加して新しい文字列に加える
- 現在の文字がハッシュテーブルにすでに存在すれば重複文字なので、skipする。
- 重複した文字を削除した結果が、新しい文字列になります。
unordered_set を使用するサンプルコードを次に示します。
#include <iostream>
#include <unordered_set>
#include <string>
std::string removeDuplicates(const std::string& str) {
std::string result;
std::unordered_set<char> uniqueChars;
for (char c : str) {
if (uniqueChars.find(c) == uniqueChars.end()) {
uniqueChars.insert(c);
result += c;
}
}
return result;
}
int main() {
std::string input = "abracadabra";
std::string result = removeDuplicates(input);
std::cout << result << std::endl; // 输出 "abrcd"
return 0;
}
重複した文字を消去するには、最初に出現した文字を保持し、残りの文字は消去する方法を用いる。最終に出現した文字を保持する場合は、ハッシュテーブルの型をstd::unordered_map<char, int>に変えて、文字を文字列内の索引位置にマッピングできる。文字列を走査する際には、ハッシュテーブル内の文字のインデックスを更新する。最後に、ハッシュテーブルを走査して、最も大きいインデックスの文字を結果文字列に追加する。