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

蓝桥杯 3514子串简写

问题描述

程序猿圈子里正在流行一种很新的简写方法:对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。例如 internation-alization 简写成 i18n,Kubernetes (注意连字符不是字符串的一部分)简写成 K8s, Lanqiao 简写成 L5o 等。

在本题中,我们规定长度大于等于 K 的字符串都可以采用这种简写方法(长度小于 K 的字符串不配使用这种简写)。

给定一个字符串 S 和两个字符 c1​ 和 c2​ ,请你计算 S 有多少个以 c1​ 开头 c2​ 结尾的子串可以采用这种简写?

输入格式

第一行包含一个整数 K。

第二行包含一个字符串 S 和两个字符 c1​ 和 c2​。

输出格式

一个整数代表答案。

样例输入

4
abababdb a b

样例输出

6

样例说明

符合条件的子串如下所示,中括号内是该子串:

[abab]abdb

[ababab]db

[abababdb]

ab[abab]db

ab[ababdb]

abab[abdb]

评测用例规模与约定

对于 20 的数据,2≤K≤∣S∣≤10000。

对于 100 的数据,2≤K≤∣S∣≤5×10^{5}。S 只包含小写字母。c1​ 和 c2​ 都是小写字母。

∣S∣代表字符串 S 的长度。

 

#include<iostream>
using namespace std;

int k;
string s;
char c1, c2;
long long ans;

int main()
{
	cin>>k;
	cin>>s>>c1>>c2;
	
	long long cnt = 0;
	//i j:指向子串的开头和结尾 下标 
	for(int i=0, j=k-1; j<s.size(); i++, j++)
	{
		if(s[i] == c1) cnt++; //统计c1的数量
		
		//如果遇到c2,就把之前统计的所有的c1的数量累加到答案里 
		//因为之前的每一个c1都可以和当前的c2组成一个子串 
		if(s[j] == c2) ans += cnt;
	}
	cout<<ans;
	
	return 0;
} 

相关文章:

  • 【python】一文掌握 Conda 指令 (anaconda备忘清单)
  • 【每日学点HarmonyOS Next知识】防截屏、加载不同View、函数传参、加载中效果、沉浸式底部状态栏
  • 第八节:红黑树(初阶)
  • 容易混淆的概念:requests 库 和 Flask 的 request
  • 【3DMAX科研绘图】3DMAX晶体网络插件CrystalNet使用方法
  • 【VUE2】第四期——路由
  • JavaScript如何实现复制图片功能?
  • C语言【数据结构】:理解什么是数据结构和算法(启航)
  • 【从零开始学习计算机科学】数据库系统(七)并发控制技术
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.2成本优化与冷热数据分离
  • 什么是SpringCloud?为何要选择SpringCloud?
  • 计算机视觉|首次写入政府工作报告!这个科技新词“具身智能”到底是什么?
  • PHP批量去除Bom头的方法
  • Linux——进程(2)进程的状态
  • 《ECharts :不强不大,做点可视化》
  • AI本地部署
  • Flutter 按钮组件 TextButton 详解
  • 《探秘人工智能与鸿蒙系统集成开发的硬件基石》
  • 重生之我在学Vue--第12天 Vue 3 性能优化实战指南
  • VMWare中的三种网络模式
  • 岳阳网站优化/移动建站优化
  • 做视频网站服务器要求吗/外链互换平台
  • 温州手机网站建设/互联网金融
  • 网站美工设计收费/方象科技的企业愿景
  • 东莞网页制作报价/重庆网站关键词排名优化
  • 设计一个企业网站首页/seo推广效果怎么样