11/30
//如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :
//
//操作 1:交换任意两个 现有 字符。
//例如,abcde -> aecdb
//操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。
//例如,aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a )
//你可以根据需要对任意一个字符串多次使用这两种操作。
//
//给你两个字符串,word1 和 word2 。如果 word1 和 word2 接近 ,就返回 true ;否则,返回 false 。
//
//
//
//示例 1:
// abc bca
//输入: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 ,反之亦然。
//
//提示:
//
//1 <= word1.length, word2.length <= 105
//word1 和 word2 仅包含小写英文字母
//思路 :1.直接判断两个字符串长度是否相等 2:判断两个字符串含有的所有字符是否相同 3:判断所有字符出现的频次是否相等
class Solution {
func closeStrings(_ s: String, _ t: String) -> Bool {
var hashcharCounter1 = hashCounter(s: s)
var hashcharCounter2 = hashCounter(s: t)
if s.count != t.count {
return false
}
print(hashcharCounter1,hashcharCounter2)
if (hashcharCounter1.keys != hashcharCounter2.keys){
return false
}
if (hashcharCounter1.values.sorted(by: {1}) != hashcharCounter2.values.sorted(by: {
1})) {
return false
}
return true
}
func hashCounter(s:String) -> [String:Int] {
var hashcharCounter = [String:Int]()
for char in s {
guard let value = hashcharCounter["\(char)"] else {
hashcharCounter["\(char)"] = 1
continue
}
hashcharCounter["\(char)"] = value + 1
}
return hashcharCounter
}
}
//bac abc true
print(Solution().closeStrings("cabbba", "abbccc"))
//aabbbc abbccc a:2 b:3 c:1 a:1 b:2 c:3