题解 | #最长重复子串#

最长重复子串

http://www.nowcoder.com/practice/4fe306a84f084c249e4afad5edf889cc

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param a string字符串 待计算字符串
     * @return int整型
     * @desc 两个长度相同且相邻的窗口去截取字符串,比较两个字符串内容,(如果没有相同字符串)每次向右滑动窗口
     */
    public int solve (String a) {
        char[] aChar = a.toCharArray();
        int tabSize = aChar.length/2;
        //从最大窗口开始,比较两个窗口字符串数组
        for(;tabSize>0;tabSize--){
            //窗口可滑动次数为字符串数组长度减去(窗口长度*2),变化项为窗口左侧起始位置,每次滑动一格
            for(int tabSlide=0;tabSlide<=aChar.length-tabSize*2;tabSlide++){
                int compareSize = 0;
                //如果两个窗口对应字符串相同,直接返回长度
                if(compareTabString(aChar,tabSlide,tabSize)){
                     return tabSize*2;
                }
            }
        }
        //没有
        return 0;
    }
    //比较两个窗口字符串的函数(相同则返回true作为判断重复子串的标准)
    public boolean compareTabString(char[] a,int tabIndex,int tabSize){
        for(int i=tabIndex;i<tabIndex+tabSize;i++){
            if(a[i]!=a[i+tabSize])
                return false;
        }
        return true;
    }
}
全部评论

相关推荐

2025-12-13 14:51
已编辑
井冈山大学 算法工程师
龙虾x:算法比你强的没有你美,比你美的…..算了已经没有比你美的了
工作两年想退休了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务