您的位置:首页 > 游戏 > 游戏 > 鹤壁seo_九福在线代理网页_seo优化团队_数据分析师

鹤壁seo_九福在线代理网页_seo优化团队_数据分析师

2025/2/13 15:58:45 来源:https://blog.csdn.net/fcc13461862452/article/details/145557414  浏览:    关键词:鹤壁seo_九福在线代理网页_seo优化团队_数据分析师
鹤壁seo_九福在线代理网页_seo优化团队_数据分析师

字串简写

题目来源

蓝桥杯 2023 省赛

原题链接

蓝桥杯 字串简写

问题描述

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

在本题中,我们规定长度大于等于 K 的字符串都可以采用这种简写方法(长度小于 K 的字符串不配使用这种简写)。
给定一个字符串 S和两个字符 c1和 c 2 ,请你计算 S 有多少个以 c1开头 c 2结尾的子串可以采用这种简写?

输入格式
第一行包含一个整数 K。
第二行包含一个字符串 S 和两个字符 c 1 和 c 2。

输出格式
一个整数代表答案。

样例输入

4
abababdb a b
copy

样例输出

6
copy

完整代码

暴力算法

通过率70%

#include <iostream>
#include <cstring>
using namespace std;
int n;  //要求字符串长度大于n
string s;  //字符串
char a,b;  //起始、终止字符
int main()
{cin>>n;cin>>s>>a>>b;int res=0;//遍历字符串for(int i=0;i<=s.size()-n;i++){//若找到与起始字符a相同的字符if(s[i]==a){int j=i+n-1;  //长度大于n//遍历剩余字符串while(j<s.size()){if(s[j]==b) res++;j++;}}}cout<<res<<endl;return 0;
}

优化

通过率100%

#include <iostream>
#include <cstring>
using namespace std;
const int N=5e5+10;
int n;  //要求字符串长度大于n
char a,b;  //起始、终止字符
string s;  //字符串
int sumb[N];  //记录从当前位置开始以后终止字符串的个数
int main()
{cin>>n>>s>>a>>b;long long res=0;int last=0;  //记录前一个终止字符记录的个数//逆序遍历for(int i=s.size()-1;i>=0;i--){if(s[i]==b){sumb[i]=last+1;  //从当前位置i开始往后的终止字符b的个数=后一个出现的b记录的个数sumb[i]+当前的一个blast=sumb[i];}}for(int i=0;i<=s.size()-n;i++){if(s[i]==a){int j=i+n-1;while(j!=s.size()){if(sumb[j]!=0){res+=sumb[j];break;}else j++;}}}cout<<res<<endl;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com