当前位置: 首页 > news >正文

【蓝桥杯】3514字串简写

在这里插入图片描述

暴力

发现只能通过20%测试点。

k = int(input())
s, c1, c2 = input().split()
le = len(s)
s = [0] + [i for i in s] # 1 -- le

cnt = 0
for i in range(1, le - (k-1) +1):
    if s[i] == c1:
        for j in range(i+(k-1),le+1):
            if s[j] == c2:cnt +=1
print(cnt)

优化

 if s[i] == c1:
        for j in range(i+(k-1),le+1):
            if s[j] == c2:cnt +=1

这一步分其实在求区间range(i+(k-1),le+1)c2的个数,由于要遍历所以很费时。想到可以用前缀和提前处理这一部分,节省一层循环。

k = int(input())
s, c1, c2 = input().split()
le = len(s)
s = [0] + [i for i in s] # 1 -- le

pre = [0 for i in range(le+1)]
for i in range(1,le+1):
    if s[i] == c2:
        pre[i] = pre[i-1] + 1
    else:
        pre[i] = pre[i-1]
# print(pre)
cnt = 0
for i in range(1, le - (k-1) +1):
    if s[i] == c1:
        cnt += pre[-1] - pre[i+(k-1)-1] 
print(cnt)

总结

利用前缀和来替换掉循环。
这题多了一个长度k的限制条件,写起来要处理好下标索引。

相关文章:

  • 【LangChain接入阿里云百炼deepseek】
  • Jenkins 安装插件后构建成功但未启动容器的解决方法
  • 常见JVM命令
  • 基于AI智能算法的无人机城市综合治理
  • 有关MyBatis的缓存(一级缓存和二级缓存)
  • 网络华为HCIA+HCIP网络基础
  • 浅谈SSE爬虫
  • Linux中的基本指令(下)
  • 计算机组成原理(第五章 CPU)
  • 国内Mac,nimi安装homebrew完整过程
  • CentOS 7 64 安装 Docker
  • 【GIT】重新初始化远程仓库
  • [Linux]进程地址空间
  • APK文件结构与逆向工具链深度解析
  • 蓝桥杯 17110抓娃娃
  • 登山第十九梯:实时点云压缩——量变质不变
  • FreeRTOS(9)信号量-计数型信号量
  • 半导体工艺(七)干法刻蚀1.0
  • EaseUS Todo Backup Pro v16.0 数据备份还原软件
  • neo4j中常用cql命令汇总(基础版)
  • 巴外交部:以军在杰宁向外交使团开火
  • 刘国中出席第78届世界卫生大会并致辞
  • 资深娱乐策划人、导演马勇逝世,终年51岁
  • 家国万里,从家庭叙事看超大城市文明治理的上海方案
  • 渝昆高铁云南段路基土石方工程已完成97%,桥隧施工完成超90%
  • 当文徵明“相遇”莫奈:苏博将展“从拙政园到莫奈花园”