zoukankan      html  css  js  c++  java
  • 字符串模式匹配KMP算法

     1 package main
     2 
     3 import (
     4     "fmt"
     5 )
     6 
     7 
     8 func getNext(str string) []int {
     9     length := len(str)
    10     next := make([]int, length)
    11     next[0] = -1
    12     for i := 1; i < length; i++ {
    13         j := i - 1
    14         for j > 0 {
    15             if str[i-1] == str[next[j]] {
    16                 next[i] = next[j] + 1
    17                 break
    18             } else {
    19                 j = next[j]
    20             }
    21         }
    22         if j <= 0 {
    23             next[i] = 0
    24         }
    25     }
    26     for k := 0; k < length; k++ {
    27         fmt.Print(next[k], "	")
    28     }
    29     return next
    30 }
    31 
    32 func kmp(parstr, substr string) int {
    33     next := getNext(substr)
    34     lengthp := len(parstr)
    35     lengths := len(substr)
    36     i, j := 0, 0
    37     for i < lengthp && j < lengths {
    38         if parstr[i] == substr[j] {
    39             i++
    40             j++
    41         } else if next[j] == -1 {
    42             i++
    43             j = 0
    44         } else {
    45             j = next[j]
    46         }
    47     }
    48     if j < lengths {    
    49         return -1
    50     } else {
    51         return i - lengths
    52     }
    53 }
    54 
    55 func main() {
    56     fmt.Println(kmp("abaababaafdsbfabcaab", "aababcaab"))
    57 }
  • 相关阅读:
    jsp第七次作业
    jsp第二次作业
    第四次JSP作业
    软件测试练习第一次
    JSP第一次课后作业
    读信息
    购物商城
    页面跳转
    安卓第7周作业
    安卓第六周作业
  • 原文地址:https://www.cnblogs.com/Sunlnx/p/3426217.html
Copyright © 2011-2022 走看看