给定一个C++数组中,找到第一个字符串,其逆序也在同一数组中存在。
在这个问题中,我们给定了一个大小为 N 的字符串数组 str[]。我们的任务是创建一个程序来查找给定数组中第一个字符串,其逆序也存在于同一数组中。
让我们举一个例子来理解这个问题,
Input: str[] = ["python", "program", "C#", "language", "#C"] Output: C#
解决方案方法
解决这个问题的一种方法是直接遍历字符串数组的每个元素,并在剩余的数组中检查字符串的逆序。如果找到逆序,则返回字符串。如果遍历整个数组并且没有找到包含逆序的字符串,则返回 -1。
示例
程序说明我们解决方案的工作原理
#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); }
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
输出
The string from the array whose reverse is present in the array is C#
另一种可以在线性时间(即单次遍历)内解决问题的方法是使用哈希表。我们将把每个单词存储在哈希表中。如果任何字符串的逆序存在于哈希表中,则哈希表中的逆序字符串就是我们的结果。如果整个数组都不包含任何此类字符串,则返回 -1。
示例
程序说明我们解决方案的工作原理
#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); }
输出
The string from the array whose reverse is present in the array is C#
广告