这个题使用简单的数组就可以实现(使用哈希表反而更麻烦),首先明确题干含义:
交换字符:字符顺序互换,字符数量不变。
两种字符全部互相转换:字符顺序互换,字符数量互换。
思路:如果用两个size为26的数组对每个字符串的所有字符的数量进行维护,则两个数组中的数值在进行排序后,两个数组应该相同。
最后考虑边界情况:当一个字符串中含有另一个字符串中没有的字符,则两个字符串无法实现转化。
class Solution {
public:
bool closeStrings(string word1, string word2) {
vector<int> word1_count(26), word2_count(26);
for(char c : word1){
word1_count[c - 'a'] ++;
}
for(char c : word2){
word2_count[c - 'a'] ++;
}
for(int i = 0; i < 26; i ++){
if((word1_count[i] == 0 && word2_count[i] > 0) || word2_count[i] > 0 && word2_count[i] == 0){
return false;//排除两个字符串中有不同字符的情况
}
}
sort(word1_count.begin(), word1_count.end());
sort(word2_count.begin(), word2_count.end());
return word1_count == word2_count;
}
};