Golang实现的KMP字符串匹配算法

本文介绍了如何使用Golang实现KMP算法进行字符串匹配。虽然算法细节不在此详述,但提供了完整的Go语言代码实现。代码可能有待优化,已通过测试,欢迎读者提出改进意见,并注明原文链接:http://blog.csdn.net/gophers/article/details/23128345。
摘要由CSDN通过智能技术生成

算法的细节可以参考网上的资料或数据结构的相关教材,这里直接上代码了~

鉴于本人技艺浅陋,有的地方写的可能不合理,代码略长,如果有改进之处,请留言指点,算法本身测试过了:

package main

import (
	"fmt"
)

func GetNextValueArray(sub []byte) (next []int) {
	var (
		length        int = len(sub)
		middle        int
		compare_left  int
		compare_right int
		match_count   int
	)

	next = make([]int, length)
	next[0] = 0
	next[1] = 0

	for i := 2; i < length; i++ {
		middle = i / 2
		match_count = 0

		if i%2 == 0 {
			for j := 0; j < middle; j++ {
				compare_left = 0
				compare_right = i - 1 - j
				for compare_left <= j {
					if sub[compare_left] != sub[compare_right] {
						break
					}
					compare_left++
					compare_right++
				}
				if compare_left == j+1 {
					match_count++
				}
			}
			next[i] = match_count

		} else {
			for j :&#
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值