Матч 327, Забавный забор (FunnyFence)

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

 

Последовательность символов называется забором, если она состоит из чередующихся символов ‘|’ и ‘-’. Например, “|-|-|-|и-|-|” и являются забором , а “|-||-|” и “--нет. В заданной строке необходимо найти наибольшую подстроку, являющуюся забором, и вывести ее длину. Подстрока состоит из последовательно стоящих символов.

 

Класс: FunnyFence

Метод: int getLength(string s)

Ограничения: s содержит от 1 до 50 символов, строка s содержит только символы ‘|’ и ‘-’.

 

Вход. Строка символов s.

 

Выход. Длина наибольшей подстроки, являющуюся забором.

 

Пример входа

s

"|-|-|"

"-|-|-|-"

"||||||"

"|-|---|-|---|-|"

 

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

5

7

1

5

 

 

РЕШЕНИЕ

обработка последовательности

 

Задача требует линейного прохода по строке и нахождения наибольшей последовательности попарно разных последовательно стоящих символов. В переменной c подсчитывается длина текущего забора, в res запоминается наибольшая длина забора.

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

using namespace std;

 

class FunnyFence

{

public:

  int getLength(string s)

  {

    int i, c = 1, res = 0;

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

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

      else

      {

        if (c > res) res = c;

        c = 1;

      }

    if (c > res) res = c;

    return res;

  }

};