代码拉取完成,页面将自动刷新
# -*- coding: utf-8 -*-
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/8/27
# @File : TPM(step3)F. Card Substrings(CF).py
def TPM():
l = 0
res = 0
tag = 0#溢出标志tag
for r in range(n):
dict2[str1[r]] += 1
if (dict2[str1[r]] > dict1[str1[r]]):
tag = 1
while (tag == 1):
dict2[str1[l]] -= 1
if (dict2[str1[r]] <= dict1[str1[r]]):
tag = 0
l += 1
res += (r - l + 1)
return res
"""
套step2 E题 求区间有多少个不同的数字 的代码框架。
如何判断[l,r]是否符合题意呢?
本来,只用了一个字典,,然后多次深度拷贝重复数每个区间是否超出卡片指标
然后就TLE了。。。。
正确做法:
用两个字典,一个是str2的指标数,不会变。一个来记录当前的区间的各个字符数,会改变
如果遇到一个字符超出指标则说明此区间的右端点超出了指标,然后不断l前进,继续更新第二个字典(减操作)
然后如果刚刚超时指标的字符恢复了,就可以退出while
然后说明当前这个lr区间符合,则此时[l,r],[l+1,r]...[r,r]一定都符合题意
累加(r - l + 1)
"""
if __name__ == "__main__":
n, m = map(int, input().split())
str1 = input()
str2 = input()
dict1 = dict()
dict2 = dict()
for item in str1:
dict1[item] = 0
dict2[item] = 0
for item in str2:
if (item in str1):
dict1[item] += 1
print(TPM())
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。