Матч 324, Аллитерация (Alliteration)

Дивизион 2, Уровень 1

 

Аллитерация состоит из двух или более последовательно идущих слов, начинающихся с одной и той же буквы (прописной или заглавной). В заданной последовательности необходимо найти количество слов, входящих в самую длинную аллитерацию.

 

Класс: Alliteration

Метод: int count(vector<string> words)

Ограничения: words содержит от 1 до 50 слов, каждое слово состоит из букв ‘a’ – ‘z’, ‘A’ – ‘Z’.

 

Вход. Массив слов words, состоящих из прописных и заглавных букв латинского алфавита.

 

Выход. Количество слов в самой длинной аллитерации.

 

Пример входа

words

{"He", "has", "four", "fanatic", "fantastic", "fans"}

{"There", "may", "be", "no", "alliteration", "in", "a", "sequence"}

{"Round", "the", "rugged", "rock", "the", "ragged", "rascal", "ran"}

 

Пример выхода

2

0

2

 

 

РЕШЕНИЕ

элементарные вычисления

 

Поскольку регистр букв не имеет значения, то перед сравнением будем преобразовывать их в нижний регистр при помощи функции tolower. В переменной c подсчитываем количество подряд стоящих слов, начинающихся с одинаковой буквы.  В переменной max подсчитываем наибольшее количество слов, встретившееся в одной аллитерации.

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

#include <vector>

using namespace std;

 

class Alliteration

{

public:

  int count(vector<string> words)

  {

    int max, c = 1, i;

    for(max = i = 0; i < words.size() - 1; i++)

      if (tolower(words[i][0]) == tolower(words[i+1][0])) c++;

    else

    {

      if (c > 1) max++;

      c = 1;

    }

    if (c > 1) max++;

    return max;

  }

};