Я пытаюсь получить самую повторяющуюся последовательность символов в строке. Например:Максимальная повторяющаяся последовательность, а не самая длинная повторяющаяся последовательность
Вход:
s = "abccbaabccba"
Выход:
2
Я использовал динамическое программирование, чтобы выяснить, повторяющуюся последовательность, но это возвращает самую длинную повторяющуюся последовательность символов , Например:
ввода:
s = "abcabcabcabc"
Выход:
2
2(abcabc,abcabc) instead of 4(abc,abc,abc,abc)
Вот часть кода, где я заполняющего таблицу DP и экстрагирующей повторяющуюся последовательность. Может ли кто-нибудь предложить, как я могу получить самую повторяющуюся последовательность?
//Run through the string and fill the DP table.
char[] chars = s.toCharArray();
for(int i = 1; i <= length; i++){
for(int j = 1; j <= length; j++){
if(chars[i-1] == chars[j-1] && Math.abs(i-j) > table[i-1][j-1]){
table[i][j] = table[i-1][j-1] + 1;
if(table[i][j] > max_length_sub){
max_length_sub = table[i][j];
array_index = Math.min(i, j);
}
}else{
table[i][j] = 0;
}
}
}
//Check if there was a repeating sequence and return the number of times it occurred.
if(max_length_sub > 0){
String temp = s;
String subSeq = "";
for(int i = (array_index - max_length_sub); i< max_length_sub; i++){
subSeq = subSeq + s.charAt(i);
}
System.out.println(subSeq);
Pattern pattern = Pattern.compile(subSeq);
Matcher matcher = pattern.matcher(s);
int count = 0;
while (matcher.find())
count++;
// To find left overs - doesn't seem to matter
String[] splits = temp.split(subSeq);
if (splits.length == 0){
return count;
}else{
return 0;
}
}
Я предполагаю, что это задание. Нужно ли ** ** использовать DP для решения? вы разрешили сборники Java? –
Да! Мы не обязаны использовать DP. И да, я могу использовать коллекции java. –