두 개의 문자열 '''와 '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'을 반환합니다.