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

C++를 사용하여 두 문자열이 서로의 아나그램인지 확인

<시간/>

두 개의 문자열 '''와 'b'가 주어졌다고 가정해 봅시다. 주어진 두 문자열이 서로의 아나그램인지 확인해야 합니다. 한 문자열에 다른 문자열과 같은 문자가 포함되어 있으면 두 문자열을 서로의 아나그램이라고 합니다.

예를 들어

입력-1 -

a= anagram
b= gnarama

출력 -

True

설명 − 'gnarama' 문자열은 'anagram' 문자열과 동일한 문자를 갖습니다. 따라서 True를 반환합니다.

입력-2 -

a= programmer
b= mprogretmrqp

출력 -

False

설명 − 문자열 'b'는 문자열 'a'보다 많은 문자를 가지므로 문자열의 길이가 다르다고 말할 수 있습니다. 따라서 우리는 False를 반환합니다.

이 문제를 해결하기 위해 아래 프로그램에서 사용한 접근 방식은 다음과 같습니다.

주어진 두 개의 문자열에 대해 문자열의 길이가 있는 경우 문자열의 길이가 다르면 False를 반환합니다. 그렇지 않고 문자열의 길이가 같으면 해당 문자열의 각 문자가 다른 문자열의 문자와 일치하는지 확인하고 그렇지 않으면 True를 반환합니다.

  • 두 개의 문자열 'a'와 'b'를 입력하세요.

  • 부울 함수 checkAnagram(string a, string b)은 두 개의 문자열 'a'와 문자열 'b'를 가져와서 서로의 아나그램인지 여부를 반환합니다.

  • 문자열 'b'와 'b'의 길이를 찾아 같은지 확인합니다. 같지 않으면 false를 반환합니다.

  • C++ STL(Standard Template Library) 맵 기능을 사용하여 문자열 'a'를 반복하여 문자열 'a'의 각 문자에 대한 해시 테이블을 생성합니다.

  • 문자열 'b'의 각 문자에 대한 맵을 만드는 동안 문자열 'b'에 있는 문자를 제거합니다.

  • 그런 다음 맵을 반복하고 해시 테이블에 문자가 남아 있는지 확인하고 False를 반환하고 그렇지 않으면 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'을 반환합니다.