Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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);
}

출력

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#