zoukankan      html  css  js  c++  java
  • KMP算法

     1 public class Main {
     2 
     3     public static void main(String[] args) {
     4         String s = "abcabcababaccc";
     5         String m = "ab";
     6         
     7         System.out.println(getIndex(s, m));
     8     }
     9 
    10     public static int getIndex(String s, String m) {
    11         if(s.length() < m.length()) {
    12             return -1;
    13         }
    14 
    15         char[] str1 = s.toCharArray();
    16         char[] str2 = m.toCharArray();
    17         
    18         int i1 = 0;
    19         int i2 = 0;
    20 
    21         int[] next = getNextArray(str2);
    22 
    23         while(i1 < str1.length && i2 < str2.length) {
    24             if(str1[i1] == str2[i2]) {
    25                 i1++;
    26                 i2++;
    27             } else if(next[i2] == -1) {
    28                 i1++;
    29             } else {
    30                 i2 = next[i2];
    31             }
    32         }
    33 
    34         return i2 == str2.length?i1-i2:-1;
    35     }
    36 
    37     public static int[] getNextArray(char[] str) {
    38         if(str.length == 1) {
    39             return new int[]{-1};
    40         }
    41 
    42         int[] next = new int[str.length];
    43         next[0] = -1;
    44         next[1] = 0;
    45 
    46         int i = 2;
    47         int cn = 0;
    48 
    49         while(i < next.length) {
    50             if(str[i-1] == str[cn]) {
    51                 next[i++] = ++cn;
    52             } else if(cn > 0) {
    53                 cn = next[cn];
    54             } else {
    55                 next[i++] = 0;
    56             }
    57         }
    58 
    59         return next;
    60     }
    61 }
  • 相关阅读:
    近似计算π(for循环)
    apache部署mo_python
    文件注释方法
    算法效率的度量
    ssh
    使用类名创建对象
    筛选网址
    常用django命令
    查看和关闭端口
    update脚本出错
  • 原文地址:https://www.cnblogs.com/wylwyl/p/10512979.html
Copyright © 2011-2022 走看看