Длина самых длинных последовательных символов в строке - PullRequest
2 голосов
/ 05 апреля 2020

Я пытаюсь найти длину самого длинного последовательного символа ('!') В строке.

Например, введите:

!!!!Hello!!

Вывод:

4

Я пытаюсь решить эту проблему с помощью рекурсии, и это мой подход:

unsigned int length_of_longest_consecutive_dquotes(const char line[], int start)
{
    if (line[start] != '\0') {
        if (line[start] == '!') {
            return length_of_longest_consecutive_mark(line,start+1) + 1;
        }
        else
            return length_of_shortest_consecutive_mark(line,start+1);
    }

    return 0;
}

Где Start = 0; Я не могу понять, что мне следует реализовать в функции length_of_shortest_consecutive_dquotes (line, start). Пожалуйста, предложите мне лучший алгоритм для его реализации. Спасибо!

1 Ответ

2 голосов
/ 05 апреля 2020

На каждой итерации вы должны помнить предыдущий проанализированный символ, а затем сравнивать с первой из оставшейся части массива. Если они одинаковы, добавьте единицу к длине текущей возможной самой длинной последовательности, если не длина равна 1 (длина новой возможной самой длинной последовательности). Конечно, вы также должны помнить самую высокую длину.

Что-то подобное?

#include <iostream>

unsigned int length_of_longest_consecutive(char previous,const char *line,int ll,int current_length)
{

    if (*line==0) return ll>current_length?ll:current_length;
    if (*line==previous) {
        return length_of_longest_consecutive(*line,line+1,ll,current_length+1);
    }
    return length_of_longest_consecutive(*line,line+1,ll>current_length?ll:current_length,1);
}

int main() {
    const char *a = "a!!!b!!!!ccccc!!d";
    std::cout << length_of_longest_consecutive('\0',a,0,0) << std::endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...