判断两个字符串是否只差一个字符_leetcode1657_go_确定两个字符串是否接近

题目

如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :

操作 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"

示例 4:输入:word1 = "cabbba", word2 = "aabbss" 输出:false

解释:不管执行多少次操作,都无法从 word1 得到 word2 ,反之亦然。

提示:1 <= word1.length, word2.length <= 105

word1 和 word2 仅包含小写英文字母

解题思路分析

1、排序遍历;时间复杂度O(n),空间复杂度O(1)

7680d7b04a37b1a53d8084c5e5f24a58.png
func closeStrings(word1 string, word2 string) bool {if len(word1) != len(word2) {return false}arr1 := make([]int, 26)arr2 := make([]int, 26)m1 := make(map[uint8]bool)m2 := make(map[uint8]bool)for i := 0; i < len(word1); i++ {arr1[word1[i]-'a']++arr2[word2[i]-'a']++m1[word1[i]-'a'] = truem2[word2[i]-'a'] = true}for key := range m1 {if m2[key] != true {return false}}sort.Ints(arr1)sort.Ints(arr2)for i := 0; i < 26; i++ {if arr1[i] != arr2[i] {return false}}return true}

总结

Medium题目,注意理解题意,题意要求出现的字母相同,出现次数在排序后也相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值