本文介绍: LeetCode 1657. 确定两个字符串是否接近:思维题如果可以使用以下操作一个字符串得到另一个字符串,则认为两个字符串 接近 :操作 1:交换任意两个 现有 字符。例如,abcde -> aecdb操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。例如,aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a )你可以根据需要对任意一个字符串多次使用这两种操作。给你两个字符串word1 和 word2 。如果

【LetMeFly】1657.确定两个字符串是否接近:思维

力扣题目链接https://leetcode.cn/problems/determine-if-two-strings-are-close/

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

你可以根据需要对任意一个字符多次使用这两种操作。

给你两个字符串,word1word2 。如果 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 ,反之亦然。

 

提示

方法一:思维

思路

首先要保证两个字符串出现的字符相同(不能一个出现了a一个没出现过a)。

之后,假设字符串1的前26个字母分别出现了1次、0次、3次、5次、0次、0次、…,字符串2的前26个字母分别出现了3次、5次、1次、0次、0次、…,(sorted[1, 3, 5] = sorted[3, 5, 1]),则二者“接近”。

因为就像冒泡排序一样两两交换,总能换为对应字母出现次数相同。

方法

开辟两个大小为26的数组记录个字符串中每个字符出现的次数。

  1. 判断个数组的“为0非0”情况是否相同
  2. 判断个数排序是否相等

若满足条件则返回true

AC代码

C++
class Solution {
public:
    bool closeStrings(string word1, string word2) {
        int bin1[26] = {0}, bin2[26] = {0};
        for (char c : word1) {
            bin1[c - 'a']++;
        }
        for (char c : word2) {
            bin2[c - 'a']++;
        }
        for (int i = 0; i < 26; i++) {
            if ((bin1[i] || 0) != (bin2[i] || 0)) {
                return false;
            }
        }
        sort(bin1, bin1 + 26);
        sort(bin2, bin2 + 26);
        for (int i = 0; i < 26; i++) {
            if (bin1[i] != bin2[i]) {
                return false;
            }
        }
        return true;
    }
};
Python
class Solution:
    def closeStrings(self, word1: str, word2: str) -> bool:
        bin1 = [0] * 26
        bin2 = [0] * 26
        for c in word1:
            bin1[ord(c) - ord('a')] += 1
        for c in word2:
            bin2[ord(c) - ord('a')] += 1
        for i in range(26):
            if (bin1[i] == 0) != (bin2[i] == 0):
                return False
        bin1.sort()
        bin2.sort()
        return bin1 == bin2

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/134721619

原文地址:https://blog.csdn.net/Tisfy/article/details/134721619

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_18245.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注