码迷,mamicode.com
首页 > 其他好文 > 详细

————2020.1.17————

时间:2020-01-17 21:00:58      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:mil   height   get   edit   src   color   根据   模式   ext   

# 算法 || KMP #

 



步骤:①寻找前缀后缀最长公共元素长度

   ②求next数组 

   ③根据next数组进行匹配 

技术图片

失配时,模式串向右移动的位数为:失配字符所在位置 - 失配字符对应的next 值,即j - next[j]。

 递推求next数组。

 1 public static int[] getNext(String str) {
 2     int[] next = new int[str.length()];
 3     next[0] = -1;
 4     int i = 1, curMatch = 0;
 5     while (i<str.length()-1) {
 6         if (str.charAt(i) == str.charAt(curMatch)) {
 7             next[i+1] = next[i] + 1;
 8             curMatch++;
 9         } else {
10             next[i+1] = 0;
11             curMatch = 0;
12         }
13         i++;
14     }
15     return next;
16 }

next数组与有限自动机。

技术图片

 

 

next数组的优化。

技术图片

 

KMP。

 1 public static int KMP(String s, String t) {
 2     int[] next = getNext(t);
 3     int i = 0, j = 0;
 4     while (i < s.length() && j<t.length()) {
 5         if (j == -1 || s.charAt(i) == t.charAt(j))  
 6         {  
 7             i++;  
 8             j++;  
 9         }  
10         else  
11         {      
12             j = next[j];  
13         }  
14     }
15     if (j == t.length()) 
16         return i - j ;
17     else 
18         return -1;
19 }

BM、Sunday算法等待补充。。


# Edit : 2020.1.17

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

————2020.1.17————

标签:mil   height   get   edit   src   color   根据   模式   ext   

原文地址:https://www.cnblogs.com/zzl1209/p/12207264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!