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

第十四届蓝桥杯省赛C++B组G题【子串简写】题解(AC)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目大意

给定字符串 s s s,字符 a , b a, b a,b,问字符串 s s s 中有多少个 a a a 开头 b b b 结尾的子串。

解题思路

20pts

使用二重循环枚举左端点和右端点,判断是否为 a a a 开头 b b b 结尾的字符串,是则答案加一。

100pts

数据范围较大,我们需要将时间复杂度控制在 O ( n log ⁡ n ) O(n\log n) O(nlogn) 以内。

法一

我们需要找到所有 a a a 开头 b b b 结尾的字符串,那么我们可以对于每个字符 b b b,去看 b b b 的左侧有几个 a a a,那么这些 a … b a\dots b ab 就是合法的字符串。统计某个位置的左侧有几个字符 a a a,我们可以使用前缀和算法进行维护。

法二

我们可以去遍历整个字符串,对于每个 a a a 字符的右侧有几个字符 b b b,那么这些 a … b a \dots b ab 都是合法的字符串。统计某个位置之后字符 b b b 的个数,可以使用后缀和算法进行维护。

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;typedef long long LL;const int N = 5e5 + 10;int n, m;
string str;
char a, b;
int s[N];int main()
{cin >> m >> str >> a >> b;n = str.size();str = ' ' + str;for (int i = n; i; -- i )s[i] = s[i + 1] + (str[i] == b);LL res = 0;for (int i = 1; i + m - 1 <= n; ++ i )if (str[i] == a)res += s[i + m - 1];cout << res << endl;return 0;
}

【在线测评】

在这里插入图片描述

http://www.lryc.cn/news/392032.html

相关文章:

  • 实现Java Web应用的高性能负载均衡方案
  • 医学预测模型web APP的制作建议
  • gitlab每日备份以及restore
  • 2024-07-05 base SAS programming学习笔记9(variables)
  • kafka--发布-订阅消息系统
  • 2024最新软件测试面试题。内附答案+文档
  • 新加坡很火的slots游戏代投Facebook广告新流量趋势
  • C++ 实现字符串逆序
  • 【项目实践】贪吃蛇
  • 将exe文件添加到注册表中,实现开机时自动运行
  • SQL使用注意事项
  • uniapp小程序IOS端,uni.createInnerAudioContext()无声音
  • 第二节-K8s词汇表
  • 命令行运行git reflog(reference log)报错的解决办法
  • python3 imwrite 中文路径不成功解决方法
  • tapd 与国内外主流的8大项目管理软件大对比
  • IP地址配置
  • 【C#】ProgressBar进度条异步编程思想
  • 深入浅出3D感知中的优化与基于学习的技术1(原创系列)
  • 【CentOS 7 上安装 Oracle JDK 8u333】
  • Nginx 常用配置与应用
  • 基于Springboot的智慧养老中心管理系统
  • 数据结构笔记第3篇:双向链表
  • 详细对比Java SPI、Spring SPI 和 Dubbo SPI
  • CPU的核心数和线程数
  • 电脑游戏录屏,3款实用软件推荐给你
  • C#桌面应用开发:番茄定时器
  • PHP智慧门店微信小程序系统源码
  • SerDes介绍以及原语使用介绍(2)OSERDESE2原语仿真
  • 【稳定检索/投稿优惠】2024年教育、人文发展与艺术国际会议(EHDA 2024)