Ссылка на проблему:
https://www.hackerearth.com/practice/basic-programming/input-output/basics-of-input-output/practice-problems/algorithm/two-strings-4/
Я начал с сет и карты в эти дни.
Две строки str1 и str2 имеют одинаковую длину.
Я должен сказать, являются ли они анаграммами друг друга.
Я использовал unordered_map, чтобы решить проблему, поддерживая количество символов, которое работает за линейное время и отлично работает.
Но я хочу использовать unordered_multiset, но получаю ошибку во время выполнения.
Код:
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;// number of testcases
cin>>t;
while(t--){
string str1,str2;// two strings of equal length str1 and str2
cin>>str1>>str2;
unordered_multiset<char> s1,s2;// two sets
for(int i=0;i<str1.length();i++){
s1.insert(str1[i]);// initialization
s2.insert(str2[i]);
}
unordered_multiset<char>::iterator itr;
for(itr=s1.begin();itr!=s1.end();itr++){
if(s2.find(*itr)!=s2.end()) s2.erase(itr);/* if *itr is present in s2 then delete its address .....
i know i am making mistake somewhere here but i can't figure out*/
else {
cout<<"NO"<<"\n";// print NO if not found
break;
}
}
if(itr==s1.end()) cout<<"YES"<<"\n";// if itr reached the end print YES
}
}
Идея состоит в том, чтобы перебрать множество s1 и найти соответствующий элемент в множестве s2. Если не найдено, выведите NO и прервите прерывание, в противном случае удалите соответствующий элемент из s2, и поскольку я использую итератор для удаления элементов, поэтому при наличии нескольких вхождений символа 1-е вхождение следует удалить.
пожалуйста, дайте мне знать, если вы не получили мой вопрос