LeetCode周赛215B: 5603. 确定两个字符串是否接近
分类讨论 >> 或者看题目分析 (规律)
按其中一个样例 >> 把 这种情况的全排列全分析出来 >> 发现都是可以转换到的, 因为都有 2 3 1 这个中介
那么是不是他和每个单词出现的频率没有关系,只要最后排序后的频率数是一样就行了(不需要管是哪个单词哪个频率数),我们就只需要考虑 字符串 s1 和 字符串 s2 中的字符在另一个中是否含有, 如果没有的话 >> r e t u r n f a l s e ; return false; returnfalse;
之后数组中记录的字符都是两个字符串中共有的。
然后直接比较两个排序后的频率数是否一样就行了
AC 代码
class Solution {
public boolean closeStrings(String word1, String word2) {
if(word1.length() != word2.length()) return false;
int len1 = word1.length();
int len2 = word2.length();
int[] map1 = new int[26];
int[] map2 = new int[26];
for (int i = 0; i < len1; i++) {
if(!word2.contains(word1.charAt(i)+"")) return false;
map1[word1.charAt(i) - 'a']++;
}
for (int i = 0; i < len2; i++) {
map2[word2.charAt(i) - 'a']++;
}
Arrays.sort(map1);
Arrays.sort(map2);
for (int i = 0; i < 26; i++) {
if (map1[i] != map2[i]) return false;
}
return true;
}
}