会员
周边
众包
新闻
博问
闪存
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
hercules
KMP算法学习
先贴上一点代码,等脑子清醒点再好好理解
// 求next数组 public static int[] getNext(String pattern) { int len = pattern.length(); char[] pattern_ary = pattern.toCharArray(); int i = 0; int[] next = new int[len]; next[0] = -1; int j = -1; while(i < len - 1){ if(j == -1 || pattern_ary[i] == pattern_ary[j]){ ++i; ++j; if(pattern_ary[i] != pattern_ary[j]){ next[i] = j; }else{ next[i] = next[j]; } }else{ j = next[j]; } } return next; }
public static int search(String src, String pattern, int[] nextval) { int slen = src.length(); int plen = pattern.length(); char[] src_ary = src.toCharArray(); char[] pattern_ary = pattern.toCharArray(); int i = 0; int j = 0; while(i < slen && j < plen){ if(j == -1 || src_ary[i] == pattern_ary[j]){ ++i; ++j; }else{ // 当匹配失败的时候 j = nextval[j]; } } if(j >= plen){ return i - plen; }else{ return -1; } }
public static void main(String[] args) { String src = "abcabcabca"; String pattern = "abcabcdabc"; int[] next = getNext(pattern); for(int i = 0; i < next.length; i++){ System.out.println(i + "\t" + next[i]); } System.out.println("************************"); int position = search(src, pattern, next); System.out.println("position:" + position); }
posted on
2012-03-06 23:31
hercules
阅读(
138
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
导航
博客园
首页
联系
订阅
管理
公告