中等字符串排序
PROBLEM / 研究生阶段
1657. 确定两个字符串是否接近
如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :
*操作 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"
提示:
1 <= word1.length, word2.length <= 105word1和word2仅包含小写英文字母
参考解法
下面保留的是原始练习仓库中的个人作答,可在右侧工作台中独立重写,再按需揭示对照。
python
class Solution(object):
def closeStrings(self, word1, word2):
return (len(word1) == len(word2) and
set(word1) == set(word2) and
sorted(Counter(word1).values()) == sorted(Counter(word2).values()))
# 条件1:两个字符串长度必须相等(长度不同不可能是接近字符串)
# 条件2:两个字符串的字符集合必须相等(字符种类完全一致)
# 条件3:字符出现次数的列表排序后相等(次数分布一致)
"""
:type word1: str
:type word2: str
:rtype: bool
"""
YOUR SOLUTION1657. 确定两个字符串是否接近