Я думаю, вы можете сделать это на месте за O(n)
время. Перебирайте строку, сохраняя указатель на начало слова, которое вы обрабатываете. Если вы обнаружите, что длина слова больше k
, вы перезаписываете начало строки этим словом. Вот код C (он предполагает, что каждое слово отделено точно в пространстве):
void modify(char *s, int k){
int n = strlen(s);
int j = 0, cnt = 0, r = 0, prev = -1;
s[n++] = ' '; // Setinel to avoid special case
for(int i=0; i<n; i++){
if(s[i] == ' '){
if (cnt > k){
if(r > 0) s[r++] = ' ';
while(j < i) s[r++] = s[j++];
}
cnt = 0;
}
else {
if (prev == ' ') j = i;
cnt++;
}
prev = s[i];
}
s[r] = '\0';
}
int main(){
char s[] = "my name is vikas";
modify(s, 2);
printf("%s\n", s);
}