前缀和:


N =int(input())

c,a,b=list(map(str,input().split()))

sum=0

j=0

k=list()

for i in range(0,len(c)):

    if c[i]==a:

        j+=1

    k.append(j)

    if ((i>=(N-1))&(c[i]==b)):

        sum+=k[i-N+1]


print(sum)


二分法:


N =int(input())

c,a,b=list(map(str,input().split()))

sum=0

ps=[]

pe=[]

for i in range(len(c)):

    if c[i]==a: ps.append(i)

    if c[i]==b: pe.append(i)

for j in range(len(ps)):

    x=ps[j]

    X=x+N-1

    l=0

    r=len(pe)-1

    while l<r:

        mid=(l+r)//2

        if pe[mid]>=X:

            r=mid

        else:

            l=mid+1

    if pe[l]>=X:

        sum+=len(pe)-l


print(sum)


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论