Trong bài toán này, chúng ta được cung cấp một mảng chuỗi str [] có kích thước N. Nhiệm vụ của chúng ta là tạo một chương trình để tìm chuỗi đầu tiên từ mảng đã cho mà phần ngược lại cũng xuất hiện trong cùng một mảng .
Hãy lấy một ví dụ để hiểu vấn đề,
Input: str[] = ["python", "program", "C#", "language", "#C"] Output: C#
Phương pháp tiếp cận giải pháp
Một cách để giải quyết vấn đề là bằng cách duyệt trực tiếp từng phần tử của mảng chuỗi và kiểm tra độ chính xác của chuỗi trong mảng còn lại. Trả lại chuỗi nếu điều ngược lại được tìm thấy. Nếu toàn bộ mảng được duyệt và không tìm thấy chuỗi nào có hiện tại ngược thì return -1 .
Ví dụ
Chương trình minh họa hoạt động của giải pháp của chúng tôi
#include<iostream> #include<string.h> using namespace std; bool checkStringRev(string s1, string s2) { if (s1.length() != s2.length()) return false; int len = s1.length(); for (int i = 0; i < len; i++) if (s1[i] != s2[len - i - 1]) return false; return true; } string checkRevStringArr(string strArr[], int n){ for (int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) if (checkStringRev(strArr[i], strArr[j])) return strArr[i]; return "-1"; } int main(){ string strArr[] = { "python", "program", "C#", "language", "#C" }; int n = sizeof(strArr)/sizeof(strArr[0]); cout<<"The string from the array whose reverse is present in the array is " <<checkRevStringArr(strArr, n); }
Đầu ra
The string from the array whose reverse is present in the array is C#
Một phương pháp khác có thể giải quyết vấn đề theo thời gian tuyến tính, tức là trong một lần truyền đơn là sử dụng bản đồ băm . Chúng tôi sẽ lưu trữ từng từ trong bản đồ băm. Nếu bất kỳ chuỗi nào có mặt ngược của nó trong hashmap thì chuỗi ngược lại từ hashmap là kết quả của chúng ta. Và nếu toàn bộ mảng không chứa bất kỳ chuỗi nào như vậy, hãy trả về -1.
Ví dụ
Chương trình minh họa hoạt động của giải pháp của chúng tôi
#include<bits/stdc++.h> using namespace std; string checkRevStringArr(string strArr[], int length){ map<string,bool> stringHashMap; for(int i = 0; i < length; i++) { string str = strArr[i]; reverse(str.begin(),str.end()); if (stringHashMap.find(str) != stringHashMap.end() and stringHashMap[str]) return str; else stringHashMap[strArr[i]] = true; } return "-1"; } int main(){ string strArr[] = { "python", "program", "C#", "language", "#C" }; int n = sizeof(strArr)/sizeof(strArr[0]); cout<<"The string from the array whose reverse is present in the array is "<<checkRevStringArr(strArr, n); }
Đầu ra
The string from the array whose reverse is present in the array is C#