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

各文字を使用して別の文字列から形成できる文字列の数(C ++では最大1回)


str1とstr2の2つの文字列が与えられ、タスクは別の文字列から完全に生成できる文字列の数を計算することですが、1つの文字を1回使用して文字列を形成できます。同様に、2つの文字列str1とstr2を取得し、str1の文字を1回だけ使用して、str1にstr2が出現するかどうかを確認します。

入力 − str_1 ="技術的学習"、str_2="学習"

出力 −各文字を最大1回使用して別の文字列から形成できる文字列の数は− 1

説明 −ご覧のとおり、str_2はstr_1で1回だけ発生します。したがって、str_2のstr_1の数は1です。

入力 − str_1 =“ ellohsehelloabcoelhl、str_2 =“ helllo”

出力 −各文字を最大1回使用して別の文字列から形成できる文字列の数は− 3

説明 − str_2はhelloであることがわかるので、str_1の文字を使用してhelloという単語の形成を1回だけチェックします。ご覧のとおり、str_1にはhelloという単語が3つ形成されているため、カウントは3です。

以下のプログラムで使用されているアプローチは次のとおりです

  • 文字列str_1とstr_2を入力し、対応する長さを計算して、さらに処理するためにデータを関数に渡します。

  • 一時変数countを宣言して、str_2のカウントをstr_1に格納し、INT_MAXで初期化します。 INT_MAXはC++で使用され、変数が保持できる最大値を指定します。INT_MAXの値は+2147483647です。

  • 英語のアルファベットが26個あるため、サイズ26の配列を作成し、0で初期化します。

  • ループFORを0から文字列str_1の長さまで開始し、arr [str_1 [i]-‘a’]を1で設定します

  • 0から文字列str_2の長さまで、別のループFORを開始し、countをcountの最小値またはarr [str_2 [i]-‘a’]として設定します。

  • 返品数

  • 結果を印刷します。

#include <bits/stdc++.h>
using namespace std;
int atmost_once(string str_1, int len_str1, string str_2, int len_str2){
   int count = INT_MAX;
   int arr[26] = { 0 };
   for (int i = 0; i < len_str1 ; i++){
      arr[str_1[i] - 'a'] += 1;
   }
   for (int i = 0; i < len_str2; i++){
      count = min(count, arr[str_2[i] - 'a']);
   }
   return count;
}
int main(){
   string str_1 = "technical learning";
   int length_str1 = str_1.length();
   string str_2 = "learning";
   int length_str2 = str_2.length();
   cout<<"Count of strings that can be formed from another string using each character at-most
once are: "<<atmost_once(str_1,length_str1, str_2, length_str2);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of strings that can be formed from another string using each character at-most once are: 1

  1. C ++を使用して、文字列内の1つの余分な文字を検索します。

    2つの文字列SとTがあり、Sの長さがnで、Tの長さがn + 1であるとします。TはSに存在するすべての文字を保持しますが、1つの余分な文字を保持します。私たちの仕事は、いくつかの効率的なアプローチを使用して余分なキャラクターを見つけることです。 この問題を解決するために、1つの空のハッシュテーブルを取得し、2番目の文字列のすべての文字を挿入してから、最初の文字列から各文字を削除します。残りの文字は余分な文字です。 例 #include<iostream> #include<unordered_map> using namespace std; char getExtr

  2. Pythonで指定された制約を使用して、別の文字列から文字列を形成できるかどうかを確認します

    2つの文字列小文字の文字列sとtがあるとします。次の制約を使用してsからtを生成できるかどうかを確認する必要があります- tの文字はsにあります。たとえば、tに2つの「a」がある場合、sにも2つの「a」が必要です。 tのいずれかの文字がsにない場合は、前の2文字(前の2つのASCII値)がsにあるかどうかを確認します。たとえば、「f」がtに含まれているが、sには含まれていない場合、「d」と「e」をsから使用して「f」を作成できます。 したがって、入力がs =pghn t =pinの場合、「g」と「h」から「i」を作成して「pin」を作成できるため、出力はTrueになります。