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

14届蓝桥杯 C/C++ B组 T7 子串简写 (字符串)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
采用存储目标字符下标的方法,此题的想法比较新奇,故予以记录。

存好下标之后,可以先定位好启始的字符,然后去搜结尾字符符合长度k并且最靠近启始字符的下标,找到之后可以直接取到这个下标之后的所有下标,因为都满足了长度大于等于k。

代码:

#include<iostream>
#include<vector>
using namespace std;
const int N = 5e5 + 10;int main() {//读入int k; cin >> k;string str; cin >> str;char c1, c2; cin >> c1 >> c2;//a1存是字符c1的下标,a2存是字符c2的下标vector<int>a1;vector<int>a2;//存for (int i = 0; i < str.length(); i++) {if (str[i] == c1)a1.push_back(i);if (str[i] == c2)a2.push_back(i);}long long res = 0;//开longlong存答案for (int i = 0; i < a1.size(); i++) {//扫所有的c1对应的下标int t = a1[i];		//先取出c1对应下标int c = t + k - 1;	//定义出满足和c1距离k的下标//二分,从0二分到存c2下标的数组的长度int l = 0, r = a2.size() - 1;	while (l < r) {int mid = l + r >> 1;if (a2[mid] >= c)r = mid;	//如果当前c2的下标是大于等于最近的位置,就去搜更小的else l = mid + 1;}//这里直接取a2的长度减去l,l在这里代表的是a2的下标//通过上面的二分,l已经是最靠近c1的了,所以这就是能够取到的最长的长度了if (a2[l] >= c)res += a2.size() - l;}cout << res;return 0;
}
http://www.lryc.cn/news/333562.html

相关文章:

  • Android 系统大致启动流程
  • 【Web】2024红明谷CTF初赛个人wp(2/4)
  • stable-diffusion-webui安装教程
  • 如何魔改 diffusers 中的 pipelines
  • 解放办公室的利器!让证卡打印机轻松应对繁忙工作场景
  • 2012年认证杯SPSSPRO杯数学建模A题(第二阶段)蜘蛛网全过程文档及程序
  • ES学习日记(七)-------Kibana安装和简易使用
  • react 父子组件的渲染机制 | 优化手段
  • elementPlus el-table动态列扩展及二维表格
  • vitepress系列-04-规整sideBar左侧菜单导航
  • golang slice总结
  • MySQL 数据库的优化
  • Redis 的主从复制、哨兵和cluster集群
  • Unity进阶之路(2)UI Toolkit
  • 实现Hello Qt 程序
  • 若依 ruoyi-vue 接口挂载获取Resources静态资源文件权限校验
  • 【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)
  • 「论文阅读」还在手写Prompt,自动Prompt搜索超越人类水平
  • 安全测试概述和用例设计
  • JavaScript 超详细学习思路
  • LeetCode:1483. 树节点的第 K 个祖先(倍增 Java)
  • ConstraintLayout在复杂布局中,出现卡顿问题解决记录
  • 责任链模式详解+代码案例
  • 如何让Webots支持C#语言开发的控制器
  • 如何将本地仓库放到远程仓库中
  • Jedis-事务
  • 智慧安防监控EasyCVR视频调阅和设备录像回看无法自动播放的原因排查与解决
  • 百元不入耳蓝牙耳机哪个好?必入五款高性价比产品
  • android APP monkey 测试
  • IMBoy缓存系统深度解析:为何选择depcache而非ETS或Redis