算法-kmp-1
1 public class KpmStr { 2 public int getIndexOf(String s, String m) { 3 if (s == null || m == null || s.length() < 1 || m.length() < 1 || s.length() < m.length()) { 4 return -1; 5 } 6 char[] i = s.toCharArray(); 7 char[] j = m.toCharArray(); 8 int[] index = getIndex(j); 9 int k = 0; 10 int f = 0; 11 while (k < i.length && f < j.length) { 12 if (i[k] == j[f]) { 13 k++; 14 f++; 15 } else if (index[f] == -1) { 16 k++; 17 } else { 18 f = index[f]; 19 } 20 } 21 return f == j.length ? k - f : -1; 22 } 23 // 求字符前面字符串中 前缀和后缀匹配的最大长度 不能取总长总长肯定一致无意义 24 private int[] getIndex(char[] m) { 25 if (m.length == 1) { 26 return new int[]{-1}; 27 } 28 int[] res = new int[m.length]; 29 res[0] = -1; 30 res[1] = 0; 31 int index = 2; 32 int cn = 0; 33 while (index < m.length) { 34 if (m[cn] == m[index - 1]) { 35 res[index++] = ++cn; // index-1位置的字符与 前一个位置下标cn位置字符相等 index位置的值 等于cn+1 36 // index进行下一个字符的比对 cn已经加一的++cn是为了方便计算 37 } else if (cn > 0) { 38 // 字符不匹配 跳到cn位置的字符比较 39 cn = res[cn]; 40 } else { 41 // cn到m[]的头了 42 res[index++] = 0; 43 } 44 } 45 return res; 46 } 47 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!