Найдите подстроку длины n, которая повторяется максимальное количество раз в заданной строке.Максимально повторяющаяся подстрока размера n
Вход: abbbabbbb # 2
Выход: бб
Мое решение:
public static String mrs(String s, int m) {
int n = s.length();
String[] suffixes = new String[n-m+1];
for (int i = 0; i < n-m+1; i++) {
suffixes[i] = s.substring(i, i+m);
}
Arrays.sort(suffixes);
String ans = "", tmp=suffixes[0].substring(0,m);
int cnt = 1, max=0;
for (int i = 0; i < n-m; i++) {
if (suffixes[i].equals(suffixes[i+1])){
cnt++;
}else{
if(cnt>max){
max = cnt;
ans =tmp;
}
cnt=0;
tmp = suffixes[i];
}
}
return ans;
}
Это может быть сделано лучше, чем выше O (нм) времени и O (N) пространства решения?
Хорошая проблема. Чашка чая, пока мы решим это для вас, сэр или мэм? Покажите, что вы пробовали, чтобы решить проблему самостоятельно. – Paul
Я отредактирую вопрос с тем, что я пробовал. – Leo18
Посмотрите на [этот вопрос] (http://stackoverflow.com/questions/38372159/longest-maximum-repeating-substring). Не решает ту же проблему, что и у вас, но она легко трансформируется. Или в качестве альтернативы это [статья википедии] (https://en.wikipedia.org/wiki/Longest_repeated_substring_problem) также предоставляет решение. – Paul