在C ++中以给定的字符串数组打印所有成对的字谜

在这个问题中,我们得到了一个字符串数组,并且我们必须打印该给定数组的所有成对的字谜。

字谜是通过重新排列另一个字符串的字符而形成的字符串。像-你好和哈哈

让我们以一个例子来了解问题-

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

为了解决这个问题,我们将使用循环嵌套。我们需要两个嵌套循环,外部循环将遍历数组并选择元素。嵌套循环将检查每个字符串,并检查它们是否为字谜。

示例

让我们看一下实现该算法的程序-

#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.

该解决方案很容易理解,但效率较低。因此,可以对我们的解决方案进行一些优化以使其更有效。我们可以通过对包含字符串的数组进行排序来实现。这种排序的数组将使字谜的查找更加容易。