Матч 320, Сегмент строки (StringSegment)

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

 

Имеется строка, состоящая из нескольких сегментов одинаковых букв. Например, строка “aaabbaaac” состоит из четырех сегментов: “aaa”, “bb”, “aaa” и “c”. По заданной строке необходимо вычислить среднюю длину таких сегментов.

 

Класс: StringSegment

Метод: double average(string s)

Ограничения: s содержит от 1 до 50 символов ‘a’ – ‘z’.

 

Вход. Строка s.

 

Выход. Среденее значение длины сегментов, состоящих из одинаковых букв.

 

Пример входа

s

aaabbaaac

“aabbccdd”

“abba”

 

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

2.25

2.0

1.33333333

 

 

РЕШЕНИЕ

обработка строк

 

Находим количество пар разных соседних букв. Оно равно числу сегментов одинаковых букв минус один. Разделим количество букв в строке на число сегментов, получим среднее значение длин последних.

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

using namespace std;

 

class StringSegment

{

public:

  double average(string s)

  {

    int i, c = 1;

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

      if (s[i] != s[i + 1]) c++;

    return 1.0 * s.size() / c;;

  }

};