按照这个思路,我首先使用map<char,int>存储两个字符串的字符数量。
然后利用迭代器it1遍历其中一个map数组(m1),判断m2是否存在it1->first字符,如果存在就用将have置为1。同时判断m2中是否存在it1->second数量的字符,如果存在就用将flag置为1,并将m2[it->first]置为-1表示已经选择该数量的字符。如果其中have和flag其中一个不满足就返回false。
全部 遍历即为接近,返回true。
AC代码如下:
class Solution {
public:
bool closeStrings(string word1, string word2) {
map<char,int> m1,m2;
if(word1.size() != word2.size()) return false;
int size = word1.size();
for(int i = 0; i < size; i++){
m1[word1[i]]++;
m2[word2[i]]++;
}
map<char,int>::iterator it1;
for(it1 = m1.begin(); it1 != m1.end(); it1++){
map<char,int>::iterator it2;
int flag = 0,have = 0;
for(it2 = m2.begin(); it2 != m2.end(); it2++){
if(it1->first == it2->first)have=1;
if(flag == 0 && it1->second == it2->second){
flag = 1;
it2->second = -1;
}
if(flag && have) break;
}
if(!flag || !have) return false;
}
return true;
}
};