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

C++で指定された文字列配列のアナグラムのすべてのペアを出力します


この問題では、文字列の配列が与えられ、その配列のアナグラムのすべてのペアを出力する必要があります。

アナグラム 別の文字列の文字を再配置することによって形成される文字列です。 Like − hello and lolhe

問題を理解するために例を見てみましょう-

Input: array = {“hello”, “hrdef”, “from”, “lohel”, “morf”}.
Output: [hello, lohel] , [from , morf]

この問題を解決するために、ループのネストを使用します。 2つのネストされたループが必要です。外側のループは配列をトラバースして要素を選択します。ネストされたループは、各文字列をチェックし、それらがアナグラムであるかどうかをチェックします。

そのアルゴリズムを実装するプログラムを見てみましょう-

#include <iostream>
using namespace std;
#define NO_OF_CHARS 256
bool isAnagramString(string str1, string str2){
   int count[NO_OF_CHARS] = {0};
   int i;
   for (i = 0; str1[i] && str2[i]; i++){
      count[str1[i]]++;
      count[str2[i]]--;
   }
   if (str1[i] || str2[i])
      return false;
   for (i = 0; i < NO_OF_CHARS; i++)
      if (count[i])
         return false;
      return true;
}
void printAnagrams(string arr[], int n){
   for (int i = 0; i < n; i++)
      for (int j = i+1; j < n; j++)
         if (isAnagramString(arr[i], arr[j]))
            cout<<arr[i]<<" and "<<arr[j]<<" are anagrams.\n";
}
int main(){
   string arr[] = {"hello", "hrdef", "from", "lohel", "morf"};
   int n = sizeof(arr)/sizeof(arr[0]);
   printAnagrams(arr, n);
   return 0;
}

出力

hello and lohel are anagrams.
from and morf are anagrams.

このソリューションは非常に理解しやすいですが、効率は劣ります。そのため、ソリューションをより効果的にするために、ソリューションにいくつかの最適化を行うことができます。文字列を含む配列をソートすることでそれを行うことができます。このソートされた配列により、アナグラムの検索が容易になります。


  1. 特定の文字列のすべてのサブ文字列をC++で出力するプログラム

    このチュートリアルでは、特定の文字列のすべての部分文字列を出力するプログラムについて説明します。 このために、文字列または文字の配列が提供されます。私たちのタスクは、その特定の文字列のすべてのサブ文字列を出力することです。 例 #include<bits/stdc++.h> using namespace std; //printing all the substrings void print_substr(char str[], int n){    for (int len = 1; len <= n; len++){    

  2. C++での文字列の配列

    文字列の配列は、stringキーワードを使用してC++で作成できます。ここでは、このアプローチを使用したC++プログラムについて説明しています。 アルゴリズム Begin Initialize the elements of array by string keyword. And take string as input. Print the array. End. サンプルコード #include<iostream> #include<bits/stdc++.h> using namespace std; int main() {   &nbs