【LeetCode:1657. 确定两个字符串是否接近 | 计数 + 阅读理解】-LMLPHP

【LeetCode:1657. 确定两个字符串是否接近 | 计数 + 阅读理解】-LMLPHP

【LeetCode:1657. 确定两个字符串是否接近 | 计数 + 阅读理解】-LMLPHP

🚩 题目链接

⛲ 题目描述

如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :

操作 1:交换任意两个 现有 字符。
例如,abcde -> aecdb
操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。
例如,aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a )
你可以根据需要对任意一个字符串多次使用这两种操作。

给你两个字符串,word1 和 word2 。如果 word1 和 word2 接近 ,就返回 true ;否则,返回 false 。

示例 1:

输入:word1 = “abc”, word2 = “bca”
输出:true
解释:2 次操作从 word1 获得 word2 。
执行操作 1:“abc” -> “acb”
执行操作 1:“acb” -> “bca”
示例 2:

输入:word1 = “a”, word2 = “aa”
输出:false
解释:不管执行多少次操作,都无法从 word1 得到 word2 ,反之亦然。
示例 3:

输入:word1 = “cabbba”, word2 = “abbccc”
输出:true
解释:3 次操作从 word1 获得 word2 。
执行操作 1:“cabbba” -> “caabbb”
执行操作 2:“caabbb” -> “baaccc”
执行操作 2:“baaccc” -> “abbccc”
示例 4:

输入:word1 = “cabbba”, word2 = “aabbss”
输出:false
解释:不管执行多少次操作,都无法从 word1 得到 word2 ,反之亦然。

提示:

1 <= word1.length, word2.length <= 105
word1 和 word2 仅包含小写英文字母

🌟 求解思路&实现代码&运行结果


⚡ 计数 + 阅读理解

🥦 求解思路
  1. 通过理解题目的意思,题目有俩个不同的操作,但是无论是操作1,还是操作2,最后想让字符串1变换为字符串2,那么字符串1和字符串2中出现的字符都是相同的,同时,次数也都是相同的【注意:不一定是每个字符出现的次数相同,排序后判断俩个词频表是否相等即可】。
  2. 有了上面的求解思路,接下来通过具体的代码来实现。
  3. 实现代码如下所示:
🥦 实现代码
class Solution {
    public boolean closeStrings(String word1, String word2) {
        int n=word1.length(),m=word2.length();
        if(n!=m) return false;
        int[] cnt1=new int[26];
        int[] cnt2=new int[26];
        for(int i=0;i<n;i++){
            cnt1[word1.charAt(i)-'a']++;
            cnt2[word2.charAt(i)-'a']++;
        }
        // 出现的字母必须都一样
        for(int i=0;i<26;i++){
            if((cnt1[i]==0)!=(cnt2[i]==0)) return false;
        }
        Arrays.sort(cnt1);
        Arrays.sort(cnt2);
        return Arrays.equals(cnt1,cnt2);
    }
}
🥦 运行结果

【LeetCode:1657. 确定两个字符串是否接近 | 计数 + 阅读理解】-LMLPHP


💬 共勉

【LeetCode:1657. 确定两个字符串是否接近 | 计数 + 阅读理解】-LMLPHP

【LeetCode:1657. 确定两个字符串是否接近 | 计数 + 阅读理解】-LMLPHP

12-04 02:57