C ++を使用して、文字列内の1つの余分な文字を検索します。
2つの文字列SとTがあり、Sの長さがnで、Tの長さがn + 1であるとします。TはSに存在するすべての文字を保持しますが、1つの余分な文字を保持します。私たちの仕事は、いくつかの効率的なアプローチを使用して余分なキャラクターを見つけることです。
この問題を解決するために、1つの空のハッシュテーブルを取得し、2番目の文字列のすべての文字を挿入してから、最初の文字列から各文字を削除します。残りの文字は余分な文字です。
例
#include<iostream> #include<unordered_map> using namespace std; char getExtraCharacter(string S, string T) { unordered_map<char, int> char_map; for (int i = 0; i < T.length(); i++) char_map[T[i]]++; for (int i = 0; i < S.length(); i++) char_map[S[i]]--; for (auto item = char_map.begin(); item != char_map.end(); item++) { if (item->second == 1) return item->first; } } int main() { string S = "PQRST"; string T = "TUQPRS"; cout << "Extra character: " << getExtraCharacter(S, T); }
出力
Extra character: U
-
C++を使用して文字列の部分文字列の数を見つける
この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &
-
C ++を使用して、括弧の文字列から等しい点を見つけます。
ここでは、括弧の文字列で等しいポイントを取得する方法を説明します。等しい点はインデックスIであり、その前の開始ブラケットの数は、その後の終了ブラケットの数と等しくなります。ブラケット文字列が「(()))(()()())))」のようなものであるとすると、よく見ると次のようになります したがって、0から9までの開始ブラケットの数は5であり、9から14までの終了ブラケットの数も5であるため、これは同じポイントです。 この問題を解決するには、次のいくつかの手順に従う必要があります- すべてのインデックスiまでの文字列に表示される開き角かっこの数を保存します すべてのインデックスIまでの文字