Trong bài toán này, chúng ta được cung cấp một mảng chuỗi và chúng ta phải in tất cả các cặp đảo chữ cái của mảng đã cho đó.
Đảo ngữ là các chuỗi được hình thành bằng cách sắp xếp lại ký tự của một chuỗi khác. Thích - xin chào và lolhe
Hãy lấy một ví dụ để hiểu vấn đề -
Input: array = {“hello”, “hrdef”, “from”, “lohel”, “morf”}. Output: [hello, lohel] , [from , morf]
Để giải quyết vấn đề này, chúng ta sẽ sử dụng lồng các vòng lặp. Chúng ta cần hai vòng lặp lồng nhau, vòng lặp bên ngoài sẽ đi qua mảng và chọn các phần tử. Vòng lặp lồng nhau sẽ kiểm tra từng chuỗi và kiểm tra xem chúng có phải là đảo ngữ hay không.
Ví dụ
Hãy xem chương trình triển khai thuật toán đó -
#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; }
Đầu ra
hello and lohel are anagrams. from and morf are anagrams.
Giải pháp này khá dễ hiểu nhưng hiệu quả kém hơn. Vì vậy, có thể có một số tối ưu hóa có thể được thực hiện cho các giải pháp của chúng tôi để làm cho nó hiệu quả hơn. Chúng ta có thể làm điều đó bằng cách sắp xếp mảng của chúng ta có chứa một chuỗi. Mảng được sắp xếp này sẽ giúp tìm kiếm đảo ngữ dễ dàng hơn.