求字符串中的“最长重复子串”

package ali;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Main {
	
	// 思路:使用两个指针,两个指针的间隔从1,2,3...依次增大, 同时向右移动两个指针,
	// 在移动的过程中判断指针位置的字符是否相同,并记录最长子串的长度。
	public static void main(String[] args) {  
        String str1 = "hellowdhelloko";  
        String result = maxRepat(str1);  
        System.out.println(result);  
    }  
	
	// i索引就是上面说到的 间隔,j索引就是不断遍历这个字符串每一个字符的指针
    public static String maxRepat(String input) {  
        // 参数检查  
        if (input == null || input.length() == 0) {  
            return null;  
        }  
        // 重复子串的最长长度  
        int max = 0;  
        // 最长重复子串的起始位置  
        int first = 0;  
        int k = 0;  
        for (int i = 1; i < input.length(); i++) {  
            for (int j = 0; j < input.length() - i; j++) {  
                if (input.charAt(j) == input.charAt(i + j)) {  
                    k++;  
                } else {  
                    k = 0;  
                }  
                if (k > max) {  
                    max = k;  
                    first = j - k + 1;  
                }  
            }  
        }  
        if (max > 0) {  
            System.out.println(max);  
            return input.substring(first, first + max);  
        }  
        return null;  
    }  
  
    
	
	
}










猜你喜欢

转载自blog.csdn.net/a1066196847/article/details/77509165