获取最长不连续重复子字符串:两种方法
例如:
获取字符串“aaabddcccb”中最长不连续重复子字符串:
答案:最长不连续重复子串是“abd”
方法一:效率高,用时1毫秒,第二种方法13毫秒。
1 /** 2 * 获取最长连续不重复字符 3 * @param s 4 * @return 5 */ 6 public static String getLongestDisContinuousRepeat(String s){ 7 String res="",item="",before=""; 8 char[] ch = s.toCharArray(); 9 for (int i = 0; i < ch.length; i++) { 10 if (before.equals(ch[i]+"")) { 11 item=ch[i]+""; 12 }else { 13 item=item+ch[i]; 14 } 15 before=ch[i]+""; 16 if (item.length()>res.length()) { 17 res = item; 18 } 19 } 20 return res; 21 }
方法一 拼接字符串也可使用StringBuffer
方法二:效率低,用时13毫秒左右,
本人正则表达式新手,用的不好,以后有高效的再修改,勿怪勿怪
1 /** 2 * 获取最长不连续重复字符 3 * @param s 4 * @return 5 */ 6 public static String getLongestDisContinuousRepeat2(String s){ 7 String res=""; 8 StringBuffer item= new StringBuffer(); 9 char[] ch = s.toCharArray(); 10 for (int i = 0; i < ch.length; i++) { 11 item.append(ch[i]+""); 12 if (item.length()>res.length()) { 13 res = item.toString(); 14 } 15 if (item.toString().matches(".*?(\\w)\\1{1,}.*?")) {//正则表达式判断,是否有连续重复字符 16 item=new StringBuffer(ch[i]+""); 17 } 18 } 19 if (res.matches(".*?(\\w)\\1{1,}.*?")) {//有连续重复的字符 20 return res.substring(0, res.length()-1);//最后一个重复,去除。 21 }else { 22 return res; 23 } 24 }
源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
本文作者:好Wu赖
本文链接:https://www.cnblogs.com/erlongxizhu-03/articles/10184293.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现