Мне задали этот вопрос в конкурсе.
Учитывая строку, содержащую только M и L, мы можем изменить любое «M» на «L» или любое «L» на «M». Цель этой функции - вычислить минимальное количество изменений, которые мы должны сделать, чтобы достичь желаемой максимальной длины М-интервала K.
Например, учитывая S = "MLMMLLM" и K = 3, функция должна вернуть 1. Мы можем изменить букву в позиции 4 (считая от 0), чтобы получить "MLMMMLM", в котором самый длинный интервал букв "M" равен ровно три символа в длину.
В другом примере, учитывая S = "MLMMMLMMMM" и K = 2, функция должна возвращать 2. Мы можем, например, изменить буквы в позициях 2 и 7, чтобы получить строку "MLLMMLMLMM", которая удовлетворяет желаемому свойство.
Вот что я пробовал до сих пор, но я не получаю правильный вывод:
Я пересекаю строку и всякий раз, когда наибольшее число символов превышает K, я заменяю M на L в этой точке.
public static int solution(String S, int K) {
StringBuilder Str = new StringBuilder(S);
int longest=0;int minCount=0;
for(int i=0;i<Str.length();i++){
char curr=S.charAt(i);
if(curr=='M'){
longest=longest+1;
if(longest>K){
Str.setCharAt(i, 'L');
minCount=minCount+1;
}
}
if(curr=='L')
longest=0;
}
if(longest < K){
longest=0;int indexoflongest=0;minCount=0;
for(int i=0;i<Str.length();i++){
char curr=S.charAt(i);
if(curr=='M'){
longest=longest+1;
indexoflongest=i;
}
if(curr=='L')
longest=0;
}
Str.setCharAt(indexoflongest, 'M');
minCount=minCount+1;
}
return minCount;
}