Матч
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;
}
};