首页 > 试题广场 >

计算重复字符串长度

[编程题]计算重复字符串长度
  • 热度指数:1608 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
请从字符串中找出至少重复一次的子字符串的最大长度

输入描述:
字符串,长度不超过1000


输出描述:
重复子串的长度,不存在输出0
示例1

输入

ababcdabcefsgg

输出

3

说明

abc为重复的最大子串,长度为3
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char[] carr = str.toCharArray();
        int[][] dp=new int[carr.length][carr.length];
        int i,j,max = 0;
        for(i=0;i<carr.length;i++) {
            if(carr[0]==carr[i]) {
                dp[i][0]=1;
                dp[0][i]=1;
                if(i!=0)
                max=1;
                
            }
            
        }
        for(i=1;i<carr.length;i++) {
            for(j=1;j<carr.length;j++) {
                
                if(carr[j]==carr[i]) {
                    dp[i][j]=dp[i-1][j-1]+1;
                    if(i!=j&&dp[i][j]>max) {
                        
                        max=dp[i][j];
                        
                    }
                    
                }
                
                
                
            }
            
            
        }
//        for(i=0;i<carr.length;i++)
//        System.out.println(Arrays.toString(dp[i]));
        
        System.out.println(max);

    }
}
发表于 2020-06-05 20:48:34 回复(0)