LeetCode之最长重复子串与无重复最长子串

leetcode-1044 最长重复子串

题干
给出一个字符串 S,考虑其所有重复子串(S 的连续子串,出现两次或多次,可能会有重叠)。
返回任何具有最长可能长度的重复子串。(如果 S 不含重复子串,那么答案为 “”。)
举个例子

输入:"banana"
输出:"ana"
输入: "dfgdsfsfdfgj"
输出:  "dfg"

思路:
首先想到的是循环,就是如何让相等的地方停下来,觉得稍微复杂一点的就需要思考一番。然后思路是 先用一个外层的循环,控制内层循环的对于外层循环的加数,这样就可以 对于循环而言 先控制加一 然后一直控制加到前一个和后一个是相等的情况出现,这个时候进入记录下来记录当前的值,然后比较大小得出最后的结果。
讲真的第一天没有写出来,想了好久如何实现,但就是有些地方没能够顺下来,就第二天时候,感觉差不多了,加上看了一个大佬的答案,觉得和我思路很相似,就记录了下来。
此代码原地址

public static String maxString(String str) {
   
        if (str==null||str.length()==0) {
   
            return "";
        }
// 记录一些初值 max表示最大相差多少,first表示对于找到记录以后开始进行输出的位置初始地方。
        int k=0;
        int max=0;
        int first=0;

        for (int i = 1; i < str.length(); i++) {
   
            //从当前位置开始,将相隔i 的重复的求出来!
            for (int j = 0; j < str.length()-i; j++) {
   
                if (str.charAt(j)==str.charAt(i+j)) {
   
                    k++;
                   
                }else {
   
                    k=0;
                }
                if (k>max) {
   
                    max=k;
                    first
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值