算法练习:求字符串的最长重复子串(Java实现)

1. 求字符串的最长重复子串

例如:aaaaaaaaabbbbcccaaassscvvv这里面的最长重复子串为aaaaaaaaa

算法思路:算法时间复杂度(O(n))

1. 将这一个字符串先转成char数组;

2. 将这一char数组进行遍历

3. 比较char数组中第i-1个与第i个的字符是否相等,如果不相等则进行截取字符串长度,然后将其进行比较,如果其长度比现有长度大,则进行替换,否则什么也不做

算法实现:(Java实现)

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
private static String reSubStr(String str){
    /**
     * 设置变量
     * start:开始
     * end:结束
     * maxStart:最长子串开始位置
     * maxEnd:最长子串结束位置
     */
    int start=0,end=1,maxStart=0,maxEnd=1;
    char[] chars = str.toCharArray();
    for (int i = 1; i < chars.length; i++) {
        //判断如果不相等,则计算器长度
        if(chars[i-1]!=chars[i]) {<br>          //设置其重复子串结束位置
            end=i;
            //子串长度
            int len = end - start;
            //子串长度大于现有的最大子串长度
            if (len > (maxEnd - maxStart)) {
                //则进行赋值
                maxStart = start;
                maxEnd = end;
            }
            //开始截取位置为end结束位置
            start = end;
        }
    }
    //截取字符串
    return str.substring(maxStart,maxEnd);
}

  

posted @   lonecloud  阅读(10086)  评论(2编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 用 C# 插值字符串处理器写一个 sscanf
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:lonecloud,邀请大家一同入驻:https://www.oschina.net/sharing-plan/apply
点击右上角即可分享
微信分享提示