指定された配列の最初の文字列で、その逆もC++の同じ配列に存在します
この問題では、サイズNの文字列str []の配列が与えられます。私たちのタスクは、指定された配列から最初の文字列を検索するプログラムを作成することです。この配列の逆も同じ配列に存在します 。
問題を理解するために例を見てみましょう
Input: str[] = ["python", "program", "C#", "language", "#C"] Output: C#
ソリューションアプローチ
この問題を解決する1つの方法は、文字列配列の各要素を直接トラバースし、残りの配列の文字列のレベルをチェックすることです。 文字列を返す 逆が見つかった場合。配列全体がトラバースされ、逆の文字列が見つからない場合は、 return -1 。
例
ソリューションの動作を説明するプログラム
#include<iostream> #include<string.h> using namespace std; bool checkStringRev(string s1, string s2) { if (s1.length() != s2.length()) return false; int len = s1.length(); for (int i = 0; i < len; i++) if (s1[i] != s2[len - i - 1]) return false; return true; } string checkRevStringArr(string strArr[], int n){ for (int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) if (checkStringRev(strArr[i], strArr[j])) return strArr[i]; return "-1"; } int main(){ string strArr[] = { "python", "program", "C#", "language", "#C" }; int n = sizeof(strArr)/sizeof(strArr[0]); cout<<"The string from the array whose reverse is present in the array is " <<checkRevStringArr(strArr, n); }
出力
The string from the array whose reverse is present in the array is C#
線形時間、つまりシングルトラバーサルで問題を解決できる別の方法は、ハッシュマップを使用することです。 。各単語をハッシュマップに保存します。いずれかの文字列のハッシュマップに逆文字列が存在する場合、ハッシュマップからの逆文字列が結果になります。また、配列全体にそのような文字列が含まれていない場合は、-1を返します。
例
ソリューションの動作を説明するプログラム
#include<bits/stdc++.h> using namespace std; string checkRevStringArr(string strArr[], int length){ map<string,bool> stringHashMap; for(int i = 0; i < length; i++) { string str = strArr[i]; reverse(str.begin(),str.end()); if (stringHashMap.find(str) != stringHashMap.end() and stringHashMap[str]) return str; else stringHashMap[strArr[i]] = true; } return "-1"; } int main(){ string strArr[] = { "python", "program", "C#", "language", "#C" }; int n = sizeof(strArr)/sizeof(strArr[0]); cout<<"The string from the array whose reverse is present in the array is "<<checkRevStringArr(strArr, n); }
出力
The string from the array whose reverse is present in the array is C#
-
C++のポインタを使用して文字列を反転します
この記事では、C ++コーディングでポインターを使用して文字列を反転します。まず、文字列へのポインターの長さを計算し、次にforループをデクリメント順に実行して、反転文字列を次のように表示します。 例 #include <string.h> #include <iostream> using namespace std; int main(){ char *str="ajaykumar"; cout<<"original string::"<<str;
-
C ++で指定された文字列内の「1(0+)1」のすべてのパターンを検索します
文字列に1(0+)1のようなパターンがあるとします。ここで、(0+)は、空でない連続した1の出現を示します。すべてのパターンを見つける必要があります。パターンは重複する可能性があります。文字列は必ずしもバイナリ文字列である必要はありません。数字と小文字のみを保持できます。文字列が1101001のようなものであるとすると、そのようなパターンが2つあります。 101と1001。 この問題を解決するために、次の手順に従います- 文字列内のすべての文字cを繰り返し処理します cが1の場合、要素が0になるまで繰り返します 0のストリームが終了すると、次の文字が1かどうかを確認します