Задача 5830. Источник: Поляков. Задание КИМ 24
(Д. Статный) Текстовый файл 24-235.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита. Определите максимальное количество подряд идущих символов, среди которых нет пар одинаковых символов (например, XX, ZZ). В ответе укажите количество повторений самого часто встречающегося символ в найденной строке. Если таких строк несколько, используйте последнюю из них.
Решение
Посимвольно обрабатываем строку и ищем подстроку наибольшей длины без повторяющихся подряд символов. После этого в найденной строке ищем наиболее часто встречающуюся букву.
Python
s = open('24-235.txt').readline()
k = 1
mx = 1
r = ''
for i in range(1, len(s)):
if s[i] == s[i - 1]:
k = 1
else:
k += 1
if k >= mx:
mx = k
r = s[i - k + 1: i + 1]
mx = 0
for i in range(65, 91):
mx = max(mx, r.count(chr(i)))
print(mx)
PascalABC
function Count(s: String; c: Char): Integer;
var
i: Integer;
begin
result := 0;
for i := 1 to s.Length do
if s[i] = c then
result := result + 1;
end;
var
max, k, i: Integer;
s, r: String;
c: Char;
f: TEXT;
begin
Assign(f, '24-235.txt');
Reset(f);
Readln(f, s);
k := 1;
max := 1;
r := '';
for i := 2 to s.Length do
if s[i] = s[i - 1] then
k := 1
else
begin
k := k + 1;
if k >= max then
begin
max := k;
r := s[i - k + 1:i + 1];
end;
end;
max := 0;
for c := 'A' to 'Z' do
begin
k := count(r, c);
if k > max then
max := k;
end;
Writeln(max);
end.
C++
#include <iostream>
#include <fstream>
using namespace std;
int count(string s, char c)
{
int n = 0;
for (int i = 0; i < s.length(); i++)
if (s[i] == c)
n++;
return n;
}
int main()
{
ifstream f;
f.open("24-235.txt");
string s, r = "";
f >> s;
int k = 1, max = 1;
for (int i = 1; i < s.length(); i++)
if (s[i] == s[i - 1])
k = 1;
else
{
k++;
if (k >= max)
{
max = k;
r = s.substr(i - k + 1, k);
}
}
max = 0;
for (int i = 65; i < 91; i++)
{
k = count(r, (char)i);
if (k > max)
max = k;
}
cout << max << endl;
}
Ответ
19