11.子串简写 - 蓝桥云课 (lanqiao.cn)
问题描述
程序猿圈子里正在流行一种很新的简写方法:对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。例如 internation-alization 简写成i18nKubernetes(注意连字符不是字符串的一部分)简写成 K8sLangiao 简写成L5o等
在本题中,我们规定长度大于等于K的字符串都可以采用这种简写方法(长度小于K的字符串不配使用这种简写)。
给定一个字符串S和两个字符 和c2,请你计算S有多少个以c1 开头C2结尾的子串可以采用这种简写?
输入格式
第一行包含一个整数K
第二行包含一个字符串 S和两个字符 c1 和c2。
import os
import sys
# 请在此输入您的代码
k=int(input())
s,c1,c2=input().split()
ans=0
pre_sum=[0]*len(s) #前缀和
for i in range(len(s)):
pre_sum[i]=pre_sum[i-1] #得到前i个的和赋值到i
if s[i]==c1:
pre_sum[i]+=1 #c1出现次数
elif s[i] == c2 and i-k+1>=0:
ans+=pre_sum[i-k+1] #i-k+1表示除去中间k个字符前面有多少个c1,都可以与当前c2组合,且不会重复(c2位置变化)
print(ans)
标签:11,子串,pre,sum,字符串,c2,c1,简写
From: https://blog.csdn.net/weixin_72050316/article/details/137172619