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

ตรวจสอบว่าสองสตริงเป็นแอนนาแกรมของกันและกันโดยใช้ C++ . หรือไม่


สมมติว่าเราได้ให้สองสตริง 'a' และ 'b เราต้องตรวจสอบว่าสตริงที่ให้มาสองสายนั้นเป็นแอนนาแกรมของกันและกันหรือไม่ สองสตริงเรียกว่าแอนนาแกรมของกันและกัน ถ้าสตริงหนึ่งมีอักขระเดียวกันกับอีกสตริงหนึ่ง

ตัวอย่างเช่น

อินพุต-1

a= anagram
b= gnarama

ผลผลิต

True

คำอธิบาย − สตริง 'gnarama' มีอักขระเดียวกับสตริงที่ 'anagram' มี ดังนั้นเราจึงคืนค่า True.

อินพุต-2

a= programmer
b= mprogretmrqp

ผลผลิต

False

คำอธิบาย − สตริง 'b' มีอักขระมากกว่าสตริง 'a' ดังนั้นเราจึงสามารถพูดได้ว่าความยาวของสตริงนั้นแตกต่างกัน ดังนั้นเราจึงคืนค่าเป็นเท็จ

แนวทางที่ใช้ในโปรแกรมด้านล่างเพื่อแก้ปัญหานี้มีดังต่อไปนี้

สำหรับสองสตริงที่กำหนด เรามีความยาวของสตริงหากความยาวของสตริงแตกต่างกัน เราจะคืนค่าเป็นเท็จ มิฉะนั้น หากความยาวของสตริงเท่ากัน เราจะตรวจสอบว่าอักขระแต่ละตัวของสตริงนั้นตรงกับอักขระของสตริงอื่นหรือไม่ และคืนค่า True มิฉะนั้นเป็นเท็จ

  • รับอินพุตสองสตริง 'a' และ 'b'

  • ฟังก์ชันบูลีน checkAnagram(สตริง a, สตริง b) รับสองสตริง 'a' และสตริง 'b' และส่งคืนว่าเป็นแอนนาแกรมของกันและกันหรือไม่

  • ค้นหาความยาวของสตริง 'a' และ 'b' และตรวจสอบว่าเท่ากันหรือไม่ หากไม่เท่ากันให้คืนค่าเท็จ

  • ใช้ฟังก์ชันแมป C++ STL (ไลบรารีเทมเพลตมาตรฐาน) สร้างตารางแฮชของอักขระแต่ละตัวของสตริง 'a' โดยการวนซ้ำสตริง 'a'

  • ในขณะที่สร้างแผนที่ของอักขระแต่ละตัวของสตริง 'a' ให้ลบอักขระที่มีอยู่ในสตริง 'b'

  • จากนั้นวนซ้ำบนแผนที่และตรวจสอบว่ามีอักขระใดเหลืออยู่ในตารางแฮชและคืนค่าเป็นเท็จมิฉะนั้นให้คืนค่า True

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
bool checkAnagram(string a, string b){
   int len1= a.length();
   int len2= b.length();
   if(len1!= len2) {
      return false;
   }
   unordered_map <char,int> mp;
   for(int i=0;i<a.size();i++) {
      mp[a[i]]++;
      mp[b[i]]--;
   }
   for(auto it:mp){
      if(it.second) return false;
   }
   return true;
}
int main(){
   string a= "anagram";
   string b= "gnarama";
   cout<< checkAnagram(a,b)<<endl;
   return 0;
}

ผลลัพธ์

หากเราจะเรียกใช้โค้ดข้างต้น มันจะพิมพ์ผลลัพธ์เป็น,

1

เนื่องจากสตริงอินพุตทั้งคู่เป็นแอนนาแกรมของกันและกันจึงส่งกลับ True เช่น '1'