在给定的 C++ 字符串数组中打印全部成对出现的三元组
在本题目中,给定一个字符串数组,我们要打印出全部成对的三元组。
三元组是指通过重排字符串中的字符形成的字符串。譬如:hello 和 lolhe
我们通过一个例子来了解题目——
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.
此解决方案非常易于理解,但效率较低。因此,我们可以对解决方案进行一些优化,使其更有效。我们可以通过对包含字符串的数组排序来实现。通过排序数组,可以更轻松地找到三元组。
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP