列表

详情


6284. 使字符串总不同字符的数目相等

给你两个下标从 0 开始的字符串 word1word2

一次 移动 由以下两个步骤组成:

如果可以通过 恰好一次 移动,使 word1word2 中不同字符的数目相等,则返回 true ;否则,返回 false

 

示例 1:

输入:word1 = "ac", word2 = "b"
输出:false
解释:交换任何一组下标都会导致第一个字符串中有 2 个不同的字符,而在第二个字符串中只有 1 个不同字符。

示例 2:

输入:word1 = "abcc", word2 = "aab"
输出:true
解释:交换第一个字符串的下标 2 和第二个字符串的下标 0 。之后得到 word1 = "abac" 和 word2 = "cab" ,各有 3 个不同字符。

示例 3:

输入:word1 = "abcde", word2 = "fghij"
输出:true
解释:无论交换哪一组下标,两个字符串中都会有 5 个不同字符。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool isItPossible(string word1, string word2) { } };

golang 解法, 执行用时: 36 ms, 内存消耗: 6.3 MB, 提交时间: 2023-01-09 10:29:42

func isItPossible(word1, word2 string) bool {
	c1 := map[rune]int{}
	for _, c := range word1 {
		c1[c]++
	}
	c2 := map[rune]int{}
	for _, c := range word2 {
		c2[c]++
	}
	for x, c := range c1 {
		for y, d := range c2 {
			if y == x { // 无变化
				if len(c1) == len(c2) {
					return true
				}
			} else if len(c1)-b2i(c == 1)+b2i(c1[y] == 0) ==
				      len(c2)-b2i(d == 1)+b2i(c2[x] == 0) { // 计算变化量
				return true
			}
		}
	}
	return false
}

func b2i(b bool) int {
	if b {
		return 1
	}
	return 0
}

python3 解法, 执行用时: 96 ms, 内存消耗: 15.6 MB, 提交时间: 2023-01-09 10:29:03

'''
统计word1字符出现次数c1以及word2字符出现次数c2:

如果 x=y,那么移动后不同字符数目不变,如果此时c1和c2的长度相同,那么返回 true;
如果 x!=y,那么就看 x 的个数是否为 1,y 的个数是否为 1,x 是否出现在word2中,
y是否出现在 word1中来计算不同字符的变化量,具体见代码。
'''
class Solution:
    def isItPossible(self, word1: str, word2: str) -> bool:
        c1, c2 = Counter(word1), Counter(word2)
        for x, c in c1.items():
            for y, d in c2.items():
                if y == x:  # 无变化
                    if len(c1) == len(c2): return True
                elif len(c1) - (c == 1) + (y not in c1) == \
                     len(c2) - (d == 1) + (x not in c2):  # 计算变化量
                    return True
        return False

上一题