Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

สตริงแรกจากอาร์เรย์ที่กำหนดซึ่งมีการย้อนกลับอยู่ในอาร์เรย์เดียวกันใน C++


ในปัญหานี้ เราได้รับอาร์เรย์ของสตริง str[] ขนาด N งานของเราคือ สร้างโปรแกรมสำหรับค้นหาสตริงแรกจากอาร์เรย์ที่กำหนดซึ่งมีการย้อนกลับอยู่ในอาร์เรย์เดียวกัน .

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

Input: str[] = ["python", "program", "C#", "language", "#C"]
Output: C#

แนวทางการแก้ปัญหา

วิธีหนึ่งในการแก้ปัญหาคือผ่านแต่ละองค์ประกอบของอาร์เรย์สตริงโดยตรงและตรวจสอบความเคารพของสตริงในอาร์เรย์ที่เหลือ คืนค่าสตริง หากพบว่ากลับกัน หากข้ามอาร์เรย์ทั้งหมดและไม่พบสตริงที่มีการย้อนกลับ return -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#

อีกวิธีหนึ่งที่สามารถแก้ปัญหาได้ในเวลาเชิงเส้น กล่าวคือ ในการข้ามผ่านครั้งเดียวคือการใช้ hashmap . เราจะเก็บแต่ละคำไว้ใน hashmap หากสตริงใดมีการย้อนกลับใน hashmap สตริงย้อนกลับจาก hashmap คือผลลัพธ์ของเรา และถ้าทั้งอาร์เรย์ไม่มีสตริงดังกล่าว ให้คืนค่า -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#