蓝桥杯 字串简写(题目分析+C++完整代码)

字串简写

题目来源

蓝桥杯 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%

cpp 复制代码
#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%

cpp 复制代码
#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]+当前的一个b
      last=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;
}
相关推荐
choumin5 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
下一站春风里6 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
救救孩子把6 小时前
AI面试八股文-23_23-Agent可观测性与生产监控面试题
人工智能·面试·职场和发展·agent·langsmith·langfuase
努力努力再努力wz8 小时前
【C++高阶系列】C++20 协程底层原理:函数为什么能暂停?从状态机到 Task,彻底串起挂起、恢复与协程调度
开发语言·c++·c++20·1024程序员节
划破黑暗的第一缕曙光9 小时前
[C++]:4.模板
c++·template·模板·函数模版·类模版
十五年专注C++开发9 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11
CodeYp20199 小时前
第11讲:stack 和 queue
开发语言·c++·queue·stack
沫璃染墨9 小时前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3
hetao17338379 小时前
2026-10-25 hetao1733837 的刷题记录
c++·算法
fqbqrr10 小时前
2610C++,UI复合技术在窗口中绘画字体图标
c++·ui