1+ """
2+ Two strings are considered close if you can attain one from the other using the following operations:
3+
4+ Operation 1: Swap any two existing characters.
5+ For example, abcde -> aecdb
6+ Operation 2: Transform every occurrence of one existing character into another existing character, and do the same with the other character.
7+ For example, aacabb -> bbcbaa (all a's turn into b's, and all b's turn into a's)
8+ You can use the operations on either string as many times as necessary.
9+
10+ Given two strings, word1 and word2, return true if word1 and word2 are close, and false otherwise.
11+
12+
13+
14+ Example 1:
15+
16+ Input: word1 = "abc", word2 = "bca"
17+ Output: true
18+ Explanation: You can attain word2 from word1 in 2 operations.
19+ Apply Operation 1: "abc" -> "acb"
20+ Apply Operation 1: "acb" -> "bca"
21+ Example 2:
22+
23+ Input: word1 = "a", word2 = "aa"
24+ Output: false
25+ Explanation: It is impossible to attain word2 from word1, or vice versa, in any number of operations.
26+ Example 3:
27+
28+ Input: word1 = "cabbba", word2 = "abbccc"
29+ Output: true
30+ Explanation: You can attain word2 from word1 in 3 operations.
31+ Apply Operation 1: "cabbba" -> "caabbb"
32+ Apply Operation 2: "caabbb" -> "baaccc"
33+ Apply Operation 2: "baaccc" -> "abbccc"
34+
35+
36+ Constraints:
37+
38+ 1 <= word1.length, word2.length <= 105
39+ word1 and word2 contain only lowercase English letters.
40+ """
41+ class Solution :
42+ def closeStrings (self , word1 : str , word2 : str ) -> bool :
43+ count_word1 = collections .Counter (word1 )
44+ count_word2 = collections .Counter (word2 )
45+ counter1 = collections .Counter (count_word1 .values ())
46+ counter2 = collections .Counter (count_word2 .values ())
47+ return len (count_word1 .keys () - count_word2 .keys ()) == 0 and len (counter1 - counter2 ) == 0
0 commit comments