Задача 6526. Источник: Поляков. Задание КИМ 24
Текстовый файл 24-259.txt состоит не более чем из 106 символов и содержит только символы A, T, G, C. Найдите длину наибольшей цепочки символов, которая начинается с ATG, заканчивается на TAA и между этими группами символов не содержит цепочек TAA, TGA и TAG.
Решение
Для решения данной задачи удобнее всего воспользоваться стандартными средствами поиска подстрок в строке.
Python
f = open('24-259.txt')
s = f.readline()
mx = 0;
n1 = s.find('ATG')
while n1 != -1:
n2 = s.find('TAA', n1 + 3)
if n2 != -1:
s1 = s[n1 + 3:n2]
if 'TAA' not in s1 and 'TGA' not in s1 and 'TAG' not in s1:
mx = max(mx, n2 - n1 + 3)
n1 = s.find('ATG', n1 + 3)
print(mx)
PascalABC
var
n1, n2, max: Integer;
s, s1: String;
f: TEXT;
begin
Assign(f, '24-259.txt');
Reset(f);
Readln(f, s);
max := 0;
n1 := s.IndexOf('ATG');
while n1 <> -1 do
begin
n2 := s.IndexOf('TAA', n1 + 3);
if n2 <> -1 then
begin
s1 := s[n1 + 3:n2];
if not (s1.Contains('TAA') or s1.Contains('TGA') or s1.Contains('TAG')) then
if n2 - n1 + 3 > max then
max := n2 - n1 + 3;
end;
n1 := s.IndexOf('ATG', n1 + 3);
end;
Writeln(max);
end.
C++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f;
f.open("24-259.txt");
string s;
f >> s;
int max = 0;
int n1 = s.find("ATG");
while (n1 != -1)
{
int n2 = s.find("TAA", n1 + 3);
if (n2 != -1)
{
string s1 = s.substr(n1 + 3, n2 - n1 - 3);
if (s1.find("TAA") == -1 && s1.find("TGA") == -1 && s1.find("TAG") == -1)
if (n2 - n1 + 3 > max)
max = n2 - n1 + 3;
}
n1 = s.find("ATG", n1 + 3);
}
cout << max << endl;
}
Ответ
124