Sie sind auf Seite 1von 2

def add(a,b):

return [(x+y) for (x,y) in zip(a,b)]

def sub(a,b):
return [(x-y) for (x,y) in zip(a,b)]

def comp(a,b):
k = 0
for x,y in zip(a,b):
if(x>=y): k+=1
return k==len(a)

n = int(raw_input())
s = raw_input()

a=0
t=0
g=0
c=0

for x in s:
if x=='A': a+=1
if x=='T': t+=1
if x=='G': g+=1
if x=='C': c+=1

d = [max(a-n/4,0),max(t-n/4,0),max(g-n/4,0),max(c-n/4,0)]

l = [0,0,0,0]
if(s[0]=='A'): r = [1,0,0,0]
if(s[0]=='T'): r = [0,1,0,0]
if(s[0]=='G'): r = [0,0,1,0]
if(s[0]=='C'): r = [0,0,0,1]

ir = 0
il = 0

ans = n

while(il<n):

if(not comp(sub(r,l),d)):
if(ir<n-1):
ir+=1
if(s[ir]=='A'): r = add(r,[1,0,0,0])
if(s[ir]=='T'): r = add(r,[0,1,0,0])
if(s[ir]=='G'): r = add(r,[0,0,1,0])
if(s[ir]=='C'): r = add(r,[0,0,0,1])
else:
break
else:
if (comp(sub(r,l),d)):
ans = min(ans,ir-il+1)
if(il<n):
if(s[il]=='A'): l = add(l,[1,0,0,0])
if(s[il]=='T'): l = add(l,[0,1,0,0])
if(s[il]=='G'): l = add(l,[0,0,1,0])
if(s[il]=='C'): l = add(l,[0,0,0,1])
il+=1
print ans

Das könnte Ihnen auch gefallen