判断两个字符串是否是最接近
怎么解释,最接近?
首先两个字符串的长度要一样,字符串中的字符出现的频率要一样
然后字符串中任意两个不同字符串可以直接交换
当然,多个也可以交换,例如:aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a )
如果转换后是另一个字符串,则说这两个字符串接近
注意:次数不限
//这题 暴力一点,先统计 字符是否相同,再看频率是否相同,然后直接返回结果
class Solution {
public:
bool closeStrings(string word1, string word2) {
unordered_map<char, int> freq1, freq2;
for (char ch : word1) {
freq1[ch]++;
}
for (char ch : word2) {
if (freq1.find(ch) == freq1.end()) {
return false;
}
freq2[ch]++;
}
unordered_map<int, int> countFreq1, countFreq2;
for (const auto& kv : freq1) {
countFreq1[kv.second]++;
}
for (const auto& kv : freq2) {
countFreq2[kv.second]++;
}
return countFreq1 == countFreq2;
}
};
================================================================
更新
//贴一个官方题解
//一下子,真的想不到,第一想到的,总是粗暴的,现实生活又何尝不是如此,谈恋爱、解题...
class Solution {
public:
bool closeStrings(string word1, string word2) {
vector<int> count1(26), count2(26);
for (char c : word1) {
count1[c - 'a']++;
}
for (char c : word2) {
count2[c - 'a']++;
}
//要求字符一样,但对个数没有,字符串长度 做要求
for (int i = 0; i < 26; i++) {
if (count1[i] > 0 && count2[i] == 0 || count1[i] == 0 && count2[i] > 0) {
return false;
}
}
sort(count1.begin(), count1.end());
sort(count2.begin(), count2.end());
//排序之后,单词的出现次数,个数 是一样的,但是不能排除,元素内容是不是一样的
return count1 == count2;
}
};
月底小结:xxxxxxxxxx
人是靠不住的,靠墙墙倒,靠人人跑。唯有靠自己!
呆久了舒适区,就多出来反思反思
多看书,能看实体书最好!
今年也只看了几本书,看完之后,好像,并不能提升什么,就像,无法顺着成功道路成功。
多思考、毕竟都是在争夺的普通人……好吧,有点跳。。。