数据结构--KMP算法(字符串匹配算法)--在末尾添加字符串,是其包含字符串两次,且长度最短
在末尾添加字符串,使其包含字符串两次,且长度最短
* 找出字符串的next数组,然后添加的部分就是字符串的最后一个字符的next值到最后一个位置的值,这是最大前缀和最大后缀相等的地方
* 注意这里要找的是字符串中后面字符和前面字符匹配的最长位置,所以这里的 next.length = str.length() + 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public class ShortestHaveTwice { public static String shortestHaveTwice(String str){ int [] next = nextArray(str); System.out.println(next[str.length()]); return str + str.substring( next[str.length()] ); } private static int [] nextArray(String str) { if (str == null || str.length() == 0 ) return null ; int [] next = new int [str.length() + 1 ]; next[ 0 ] = - 1 ; next[ 1 ] = 0 ; int num = 0 ; int index = 2 ; while (index < next.length){ if (str.charAt( index - 1 ) == str.charAt( num )){ next[index++] = ++num; } else if (num > 0 ){ num = next[num]; } else { next[index++] = 0 ; } } return next; } public static void main(String[] args){ String s = shortestHaveTwice( "ababaas" ); System.out.println(s); } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 终于决定:把自己家的能源管理系统开源了!
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· C#实现 Winform 程序在系统托盘显示图标 & 开机自启动
· ASP.NET Core - 日志记录系统(二)
· 实现windows下简单的自动化窗口管理