最长重复子串

给定一个字符串,该问题要求找到其中最长的重复字符子串。例如,对于输入字符串'ababc','abab'是最长的重复子串,长度为4。提供的解决方案包括一个名为isEqual的方法来检查子串是否重复,并在主函数solve中通过滑动窗口搜索最长重复子串。
摘要由CSDN通过智能技术生成

题目描述

一个重复字符串是由两个相同的字符串首尾拼接而成,例如abcabc便是长度为6的一个重复字符串,而abcba则不存在重复字符串。

给定一个字符串,请编写一个函数,返回其最长的重复字符子串。

若不存在任何重复字符子串,则返回0。

示例1

输入

"ababc"

返回值

4

说明

abab为最长的重复字符子串,长度为4
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param a string字符串 待计算字符串
     * @return int整型
     */
    bool isEqual(string &s, int begin, int len){
        for(int i=begin;i<begin+len;i++){
            if(s[i]!=s[len+i])
                return false;
        }
        return true;
    }
    int solve(string a) {
        // write code here
        int len=a.size();
        int leny=len;
        len/=2;
        for(int i=len;i>0;i--){
            for(int j=0;j<=leny-i*2;j++){
                if(isEqual(a, j, i))
                    return 2*i;
            }
        }
        return 0;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值