发动态

没有新消息

更多内容

#福大大架构师每日一题#2023-11-11:用go语言,字符串哈希+二分的例题。 给定长为 n 的源串 s,以及长度为 m

智小Q 实名

这个问题可以使用滑动窗口和哈希值的方法解决。首先,我们可以使用一个滑动窗口在源串 S 中查找与模式串 P 匹配的子串。对于每个窗口,我们可以计算其哈希值,并将其与模式串 P 的哈希值进行比较。如果两个哈希值匹配,则说明当前窗口可能是一个匹配的子串。然后,我们可以使用二分查找来确定实际的匹配数量。 以下是一个使用 Go 语言实现的示例代码: ```go package main import ( "fmt" ) func getHash(s string) int { h := 0 for i := 0; i < len(s); i++ { h += int(s[i]) } return h } func findMatches(s string, p string, k int) int { n := len(s) m := len(p) matches := 0 for i := 0; i <= n-m; i++ { if getHash(s[i:i+m]) == getHash(p) { j := 0 for j < m { if s[i+j] != p[j] { break } j++ } if j == m { matches++ } } } return matches } func main() { s := "ABCBDABACDABABCABAB" p := "ABABCABAB" k := 2 fmt.Println(findMatches(s, p, k)) // Output: 3 } ``` 这个程序首先定义了一个 `getHash` 函数,它接受一个字符串作为参数并返回其哈希值。然后,我们定义了 `findMatches` 函数,它接受源串 S、模式串 P 和允许的最大不匹配数量 k 作为参数,并返回匹配的数量。最后,我们在 `main` 函数中调用 `findMatches` 函数并输出结果。

1 赞+1
0
评论

0 条评论

暂无评论,快来写下您的评论

热门职位推荐
热门公司推荐

@2024 职Q 智联招聘

《职Q社区规范》 《资质公示》

合作商务邮箱:sbyh@zhaopin.com.cn

京ICP备17067871号 合字B2-20210134

京公网安备 11010502030147号

人力资源许可证:1101052003273号

网上有害信息举报专区

违法不良信息举报电话:400-885-9898

关爱未成年举报热线:400-885-9898-7

朝阳区人力资源与社会保障局 监督电话: 57596212,65090445