Задача 6050. Источник: Поляков. Задание КИМ 24
(А. Богданов) Текстовый файл 24-240.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита. . Найдите максимальную длину подстроки, не содержащей подстрок, отличающихся от «DANOV» лишь на одну букву.
Решение
Посимвольно просматриваем строку и анализируем группу из пяти символов на количество совпадающих букв. Если нашли четыре совпадающих буквы, то текущая последовательность прерывается, а новая последовательность начинается с последних четырех символов прерывающей последовательности.
Python
s = open('24-240.txt').readline()
k = 4
mx = 4
s1 = 'DANOV'
for i in range(len(s) - 4):
z = 0
for j in range(5):
if s[i + j] == s1[j]:
z += 1
if z == 4:
k = 4
else:
k += 1
mx = max(mx, k)
print(mx)
PascalABC
var
max, k, i, j, z: Integer;
s, s1: String;
f: TEXT;
begin
Assign(f, '24-240.txt');
Reset(f);
Readln(f, s);
k := 4;
max := 4;
s1 := 'DANOV';
for i := 1 to s.Length - 4 do
begin
z := 0;
for j := 0 to 4 do
if s[i + j] = s1[j + 1] then
z := z + 1;
if z = 4 then
k := 4
else
begin
k := k + 1;
if k > max then
max := k;
end;
end;
Writeln(max);
end.
C++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f;
f.open("24-240.txt");
string s, s1 = "DANOV";
f >> s;
int k = 4, max = 4;
for (int i = 0; i < s.length() - 4; i++)
{
int z = 0;
for (int j = 0; j < 5; j++)
if (s[i + j] == s1[j])
z++;
if (z == 4)
k = 4;
else
{
k++;
if (k > max)
max = k;
}
}
cout << max << endl;
}
Ответ
229549