题目链接:https://www.nowcoder.com/practice/4fe306a84f084c249e4afad5edf889cc
题目描述
定义重复字符串是由两个相同的字符串首尾拼接而成。例如:"abcabc" 是一个长度为 6 的重复字符串,因为它由两个 "abc" 串拼接而成;"abcba" 不是重复字符串,因为它不能由两个相同的字符串拼接而成。
给定一个字符串,请返回其最长重复子串的长度。
若不存在任何重复字符子串,则返回 0。
本题中子串的定义是字符串中一段连续的区间。
数据范围:字符串长度不大于 10^3,保证字符串一定由小写字母构成。
进阶:空间复杂度 O(1),时间复杂度 O(n^2)
示例 1:
输入:"ababc"
返回值:4
说明:abab为最长的重复字符子串,长度为4
示例 2:
输入:"abcab"
返回值:0
说明:该字符串没有重复字符子串
解题代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param a string字符串 待计算字符串
* @return int整型
*/
public int solve(String a) {
// write code here
if (a == null || a.length() <= 1) return 0;
char[] chars = a.toCharArray();
int len = chars.length;
int maxLen = chars.length / 2;
for (int i = maxLen; i >= 1; --i) {
for (int j = 0; j <= len - 2 * i; ++j) {
if (check(chars, j, i))
return 2 * i;
}
}
return 0;
}
public boolean check(char[] chars, int start, int len) {
for (int i = start; i < start + len; ++i) {
if (chars[i] != chars[i + len])
return false;
}
return true;
}
}

评论区 0