Computer >> Máy Tính >  >> Lập trình >> C ++

Kiểm tra xem hai chuỗi có đảo chữ của nhau hay không bằng cách sử dụng C ++

Giả sử chúng ta đã cho hai chuỗi ‘a’ và ‘b. Chúng ta phải kiểm tra xem hai chuỗi đã cho có phải là đảo chữ của nhau hay không. Hai chuỗi được cho là đảo chữ của nhau nếu một chuỗi chứa cùng một ký tự với một chuỗi khác.

Ví dụ

Đầu vào-1 -

a= anagram
b= gnarama

Đầu ra -

True

Giải thích - Chuỗi ‘gnarama’ có cùng ký tự với String ‘anagram’ có. Do đó, chúng tôi trả về True.

Đầu vào-2 -

a= programmer
b= mprogretmrqp

Đầu ra -

False

Giải thích - Chuỗi ‘b’ có nhiều ký tự hơn chuỗi ‘a’ và do đó chúng ta có thể nói rằng độ dài của chuỗi là khác nhau. Do đó, chúng tôi trả về False.

Phương pháp được sử dụng trong chương trình dưới đây để giải quyết câu hỏi này như sau

Đối với hai chuỗi đã cho, chúng ta có độ dài của chuỗi nếu độ dài của chuỗi khác nhau, chúng ta sẽ trả về False. Ngược lại, nếu độ dài của chuỗi bằng nhau thì chúng tôi sẽ kiểm tra xem mỗi ký tự của chuỗi đó có khớp với các ký tự của chuỗi khác hay không và trả về True nếu không thì là False.

  • Lấy đầu vào hai chuỗi ‘a’ và ‘b’

  • Một hàm Boolean checkAnagram (chuỗi a, chuỗi b) nhận hai chuỗi ‘a’ và chuỗi ‘b’ và trả về liệu chúng có phải là đảo chữ của nhau hay không.

  • Tìm độ dài của chuỗi ‘a’ và ‘b’ và kiểm tra xem chúng có bằng nhau hay không. Nếu chúng không bằng nhau thì trả về false.

  • Sử dụng chức năng ánh xạ C ++ STL (Thư viện mẫu chuẩn), tạo bảng băm của từng ký tự trong chuỗi ‘a’ bằng cách lặp qua chuỗi ‘a’.

  • Trong khi tạo bản đồ của từng ký tự của chuỗi ‘a’, hãy xóa những ký tự có trong chuỗi ‘b’.

  • Sau đó, Lặp lại trên bản đồ và kiểm tra Nếu còn bất kỳ ký tự nào trong bảng băm và trả về False, nếu không thì trả về True.

Ví dụ

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

Đầu ra

Nếu chúng ta chạy đoạn mã trên thì nó sẽ in đầu ra là,

1

Vì cả chuỗi Đầu vào đều là đảo chữ của nhau nên nó trả về True, tức là ‘1’