From 0f25949ab98f2e86250483103b361ed37993197b Mon Sep 17 00:00:00 2001 From: wuliuqi <1737682009@qq.com> Date: Thu, 30 Nov 2023 11:12:32 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=A5=BD=E5=90=8E?= =?UTF-8?q?=E7=BC=80=E7=9A=84=E5=89=8D=E7=BC=80=E8=A2=AB=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit example: 在"bcbbabb"中找"babb" --- go/32_string/string_bm.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/go/32_string/string_bm.go b/go/32_string/string_bm.go index c64f7e6a..dc376b99 100644 --- a/go/32_string/string_bm.go +++ b/go/32_string/string_bm.go @@ -5,7 +5,7 @@ import ( "math" ) -//bc: pattern char index hash mapping +// bc: pattern char index hash mapping func generateBC(pattern string) []int { bc := make([]int, 256) @@ -21,7 +21,7 @@ func generateBC(pattern string) []int { return bc } -//generate suffix and prefix array for pattern +// generate suffix and prefix array for pattern func generateGS(pattern string) ([]int, []bool) { m := len(pattern) suffix := make([]int, m) @@ -50,7 +50,7 @@ func generateGS(pattern string) ([]int, []bool) { return suffix, prefix } -//todo +// todo func moveByGS(patternLength int, badCharStartIndex int, suffix []int, prefix []bool) int { //length of good suffix @@ -61,13 +61,12 @@ func moveByGS(patternLength int, badCharStartIndex int, suffix []int, prefix []b return badCharStartIndex + 1 - suffix[k] } - //partial match - for t := patternLength - 1; t > badCharStartIndex+1; t-- { - if prefix[t] { - return t + //search prefix + for ; k > 0; k-- { + if prefix[k] { + return patternLength - k } } - //no match return patternLength From c54ead05a063a6fac2353e050fcef59f5e3a5f70 Mon Sep 17 00:00:00 2001 From: wuliuqi <1737682009@qq.com> Date: Thu, 30 Nov 2023 11:20:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?perf:=E5=87=8F=E5=B0=91=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前边的逻辑已经确定模式串中没有与好后缀相同的其他子串, 可以跳过长度等于好后缀的前缀检查。 --- go/32_string/string_bm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/32_string/string_bm.go b/go/32_string/string_bm.go index dc376b99..c38339b2 100644 --- a/go/32_string/string_bm.go +++ b/go/32_string/string_bm.go @@ -62,7 +62,7 @@ func moveByGS(patternLength int, badCharStartIndex int, suffix []int, prefix []b } //search prefix - for ; k > 0; k-- { + for k--; k > 0; k-- { if prefix[k] { return patternLength - k }