1 回答
TA贡献1777条经验 获得超3个赞
您实际上只需要相同位置的字符计数,以及每个字符串中每个字符的总计数。然后对每个字符的最小计数求和,并在同一位置减去该计数。
https://play.golang.org/p/pknsVfZ1ZbM
package main
import (
"fmt"
"math"
)
func main() {
a := []rune("abacdead")
b := []rune("adcbadedga")
same := 0
chars := make(map[rune][]int)
for i := 0; i < len(a); i++ {
if i < len(b) && a[i] == b[i] {
same++
}
if _, ok := chars[a[i]]; !ok {
chars[a[i]] = []int{0, 0}
}
chars[a[i]][0]++
}
for i := 0; i < len(b); i++ {
if _, ok := chars[b[i]]; !ok {
chars[b[i]] = []int{0, 0}
}
chars[b[i]][1]++
}
different := -same
for char, vals := range chars {
fmt.Println(string(char), vals[0], vals[1])
different += int(math.Min(float64(vals[0]), float64(vals[1])))
}
fmt.Println("Same: ", same, "Different: ", different)
}
需要注意的是,总数与您所说的不一致:
"abacdead"
"adcbadedga"
相同的位置,我们有第一个和最后一个,如果我们删除它们:ad
"bacdea"
"dcbadega"
,然后排序
"aabcde"
"aabcddeg"
然后我们删除不匹配的字母
"aabcde"
"aabcde"
我们应该在不同的位置有六个相同的字符。
- 1 回答
- 0 关注
- 128 浏览
添加回答
举报