Description
Two strings are considered close if you can attain one from the other using the following operations:
- Operation 1: Swap any two existing characters.
For example, abcde -> aecdb - Operation 2: Transform every occurrence of one existing character into another existing character, and do the same with the other character.
For example, aacabb -> bbcbaa (all a’s turn into b’s, and all b’s turn into a’s)
You can use the operations on either string as many times as necessary.
Given two strings, word1 and word2, return true if word1 and word2 are close, and false otherwise.
Example 1:
Input: word1 = "abc", word2 = "bca"
Output: true
Explanation: You can attain word2 from word1 in 2 operations.
Apply Operation 1: "abc" -> "acb"
Apply Operation 1: "acb" -> "bca"
Example 2:
Input: word1 = "a", word2 = "aa"
Output: false
Explanation: It is impossible to attain word2 from word1, or vice versa, in any number of operations.
Example 3:
Input: word1 = "cabbba", word2 = "abbccc"
Output: true
Explanation: You can attain word2 from word1 in 3 operations.
Apply Operation 1: "cabbba" -> "caabbb"
Apply Operation 2: "caabbb" -> "baaccc"
Apply Operation 2: "baaccc" -> "abbccc"
Example 4:
Input: word1 = "cabbba", word2 = "aabbss"
Output: false
Explanation: It is impossible to attain word2 from word1, or vice versa, in any amount of operations.
Constraints:
- 1 <= word1.length, word2.length <= 105
- word1 and word2 contain only lowercase English letters.
分析
题目的意思是:给定两个字符串word1和word2,判断两个字符串是否是相近的。
- 这道题要找规律,首先如果两字符串字符和频率相同,两字符串肯定是相邻的,可以统计词频,然后判断就行了。
- 然后判断两个字符串字符相同,但是频率有所差异,这种情况也是有可能相邻的。抛开字符,只需要对频率进行排序,如果都能对应的上,就是相邻的,因为可以按照给定的规则进行转换哈。
代码
class Solution:
def closeStrings(self, word1: str, word2: str) -> bool:
c1=collections.Counter(word1)
c2=collections.Counter(word2)
for k,v in c1.items():
if(k not in c2):
return False
s1=sorted(c1.values())
s2=sorted(c2.values())
for v1,v2 in zip(s1,s2):
if(v1!=v2):
return False
return True