刷题前唠嗑
今早很尴尬,明明已经 12 点这么早睡觉了,结果早上 10 点才起床,只能说可能是最近这段时间熬夜确实比较重,身体见到有机会就趁机调养一下,这也是我早睡的目的啦
题目:确定两个字符串是否接近
题目描述
代码与解题思路
func closeStrings(word1 string, word2 string) bool {
c1, c2 := make([]int, 26), make([]int, 26)
for _, v := range word1 {
c1[v-'a']++
}
for _, v := range word2 {
c2[v-'a']++
}
sort.Ints(c1)
sort.Ints(c2)
for i := 0; i < 26; i++ {
if c1[i] != c2[i] {
return false
}
}
return true
}
上面代码是错的,我一开始理解错题目的意思了,我以为只要字母之间是可以任意替换的,其实不是,两个品种的字母之间想要替换需要保证他们的数量是相同的才行,举个例子:
func closeStrings(word1 string, word2 string) bool {
if len(word1) != len(word2) {
return false
}
var c1, c2 [26]int
for _, v := range word1 {
c1[v-'a']++
}
for _, v := range word2 {
c2[v-'a']++
}
for i := 0; i < 26; i++ {
if c1[i] == 0 && c2[i] == 0 { // 如果都不存在这个数字,就继续遍历
continue
}
if c1[i] == 0 || c2[i] == 0 { // 一个存在一个不存在,返回 false
return false
}
}
slices.Sort(c1[:])
slices.Sort(c2[:])
return slices.Equal(c1[:], c2[:])
}
这道题目说难不难,说简单也不简单,如标题,脑筋急转弯,你只需要想清楚两个点,这道题就非常容易了:
- 想要成功替换让两个数组相等,他们的长度必须相同。这就是第一行代码做的事情
- 题目支持字母之间的平替,也就是在字符串长度相同的情况下,两个字符串的字母的不同品种之间的数量相同也能满足要求。这就是后面那一大段代码做的事情,就是判断这个
所以这道题肯定是可以用位运算来做的,不过我比较懒,就不实现了
结语
原文地址:https://blog.csdn.net/Locky136/article/details/134707484
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_41062.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。