2023-11-30(无限接近的字符)

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: {0<1}) != hashcharCounter2.values.sorted(by: {0<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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容