【问题标题】:Print the number of characters which are identical and occur in the same position in both strings打印两个字符串中相同且出现在相同位置的字符数
【发布时间】:2021-08-30 04:31:23
【问题描述】:

例如如果 "abacdead" 和 "adcbadedga" 是两个字符串,那么我们需要打印相同的位置和不同的位置。

    same pos count: 2
    diff pos count: 5

如果我们使用循环的方式,a(第一个字母)会检查所有的字符(字符串2),所以循环会运行140次以上,这里如何实现O(n)。如果我们有任何数据结构,请建议我解决这个问题。

示例代码

   func Test(a, b string) {
    r := make([]map[string]interface{}, 0)
    for i := 0; i < len(a); i++ {
        for j := 0; j < len(b); j++ {
            if string(a[i]) == string(b[j]) {
                r = append(r, map[string]interface{}{
                    "position": i,
                    "char":     string(a[i]),
                })
            }

            
        }
    }
}

【问题讨论】:

  • 这个呢:a = "xbc", b="xxx"。字符'x'0 有一个匹配位置,但在23 也有2 个不匹配位置。输出应该是什么?

标签: string for-loop go


【解决方案1】:

您实际上只需要相同位置的字符数,以及每个字符串中每个字符的总数。然后将每个字符的最小计数相加,并减去相同位置的计数。

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"

如果我们删除它们,我们有第一个 a 和最后一个 d 的相同位置:

"bacdea"
"dcbadega"

然后排序

"aabcde"
"aabcddeg"

然后我们删除不匹配的字母

"aabcde"
"aabcde"

我们应该在不同的位置有六个相同的字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多