이 문제에서는 크기가 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); }
출력
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#