去一个个长度为N的子串里找字母并计数,放入字典,最后排序

while True:
    try:
        sstr=input()
        N=int(input())
        adict={}
        for i in range(len(sstr)+1-N):#因为range取不到最大的,所以要加1
            subs=sstr[i:i+N]
            sum=subs.count("G")+subs.count("C")
            if sum not in adict.values():#该句不可省,必须去重字典无序,排序后更不可预见哪个在前
                adict[subs]=sum
        alist=sorted(adict.items(),key=lambda stu:(stu[1]))
        print(alist[-1][0])
    except:
        break

稍微改进一下,主要涉及排序的方法,因为sorted函数是稳定排序,即相同的值原来在前面的排序后还在前面,可以利用这一点少写一些代码,注意与上面例子比较

while True:
    try:
        sstr=input()
        N=int(input())
        adict={}
        for i in range(len(sstr)+1-N):#因为range取不到最大的,所以要加1
            subs=sstr[i:i+N]
            sum=subs.count("G")+subs.count("C")
#             if sum not in adict.values():#可以省略该句
            adict[subs]=sum
        alist=sorted(adict.items(),key=lambda stu:(stu[1]),reverse=True) #稳定排序,逆序排序,可以预见到大数始终在前
        print(alist[0][0])
    except:
        break