給定一個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#

更新於: 2022年2月1日

131 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.