题解 | #最长重复子串#
最长重复子串
https://www.nowcoder.com/practice/4fe306a84f084c249e4afad5edf889cc
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param a string字符串 待计算字符串 * @return int整型 */ public int solve (String str) { int max = 0; for (int p = 1; p < str.length(); p++) { int n = Math.min(p, str.length() - p); do { String frontStr = str.substring(p - n, p); String backStr = str.substring(p, p + n); if (frontStr.equals(backStr)) { max = Math.max(max, n); break; } n--; }while (n > max); } return max * 2; } }
搞个浮标p在字符串里移动,还有一个计数器n代表当前子串的长度,浮标每向后移动一位,初始化计数器n为浮标前方或子串的长度取最小,取浮标前长度为n的子串和浮标后长度为n的子串,比是否相同,若不同则n - 1,若相同记录最大值,n - 1 减到最大值就停止,浮标继续向后移动