7326. Спальные вагоны

 

Поезд состоит из спальных вагонов, обозначенных буквой k, и сидячих вагонов, обозначенных буквой p. Найдите наибольшее количество спальных вагонов, следующих друг за другом в поезде.

 

Вход. В одной строке содержится последовательность букв k и p, длина которой от 1 до 1000 символов.

 

Выход. Вывести одно число – наибольшее количество следующих друг за другом спальных вагонов.

 

Пример входа

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

kpkkp

2

 

 

РЕШЕНИЕ

строки

 

Анализ алгоритма

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

Объявим переменную temp – счетчик подряд идущих букв k. Если текущей является буква k, то увеличиваем temp на 1. Иначе сбрасываем temp в 0. Максимальное достижимое значение temp равно ответу, подсчитываем его в переменной res.

 

Пример

Рассмотрим пример из условия задачи.

 

Реализация алгоритма

Входную строку храним в массиве s.

 

char s[1010];

 

Читаем входную строку s.

 

gets(s);

 

В переменной temp подсчитываем количество идущих подряд букв k. Ответ сохраняем в переменной res.

 

res = temp = 0;

 

Перебираем буквы строки s.

 

for (i = 0; i < strlen(s); i++)

{

 

Если текущей буквой является k, то увеличим temp на 1. Иначе ряд из последовательных букв k обрывается, устанавливаем temp равным 0.

 

  if (s[i] == 'k') temp++; else temp = 0;

 

Ответом является максимальное значение среди всех возможных значений temp.

 

  if (temp > res) res = temp;

}

 

Выводим ответ.

 

printf("%d\n",res);

 

Реализация алгоритма string

Читаем входную строку s.

 

cin >> s;

 

В переменной temp подсчитываем количество идущих подряд букв k. Ответ сохраняем в переменной res.

 

res = temp = 0;

 

Перебираем буквы строки s.

 

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

{

 

Если текущей буквой является k, то увеличим temp на 1. Иначе ряд из последовательных букв k обрывается, устанавливаем temp равным 0.

 

  if (s[i] == 'k') temp++; else temp = 0;

 

Ответом является максимальное значение среди всех возможных значений temp.

 

  if (temp > res) res = temp;

}

 

Выводим ответ.

 

cout << res << endl;

 

Реализация алгоритма форматированный ввод

 

#include <cstdio>

#include <cstring>

 

char s[1010];

int res, len;

 

int main()

{

  res = 0;

  scanf("%[p]",s);

  while(scanf("%[k]",s) == 1)

  {

    len = strlen(s);

    if (len > res) res = len;

    scanf("%[p]",s);

  }

  printf("%d\n",res);

  return 0;

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String []args)

  {

    Scanner con = new Scanner(System.in);

    String s = con.nextLine();

    int res = 0, temp = 0;

    for (int i = 0; i < s.length(); i++)

    {

      if (s.charAt(i) == 'k') temp++; else temp = 0;

      if (temp > res) res = temp;

    }

    System.out.println(res);

    con.close();

  }

}   

 

Python реализация

Читаем входную строку s.

 

s = input()

 

В переменной c подсчитываем количество идущих подряд букв k. Ответ сохраняем в переменной res.

 

c = res = 0

 

Перебираем буквы строки s.

 

for x in s:

 

Если текущей буквой является k, то увеличим c на 1. Иначе ряд из последовательных букв k обрывается, устанавливаем c равным 0.

 

  if x == 'k':

    c += 1

  else: c = 0

 

Ответом является максимальное значение среди всех возможных значений c.

 

  res = max(res, c)

 

Выводим ответ.

 

print(res)