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

【C++】牛客 ——DP36 abb

✨题目链接:

DP36 abb


✨题目描述 

leafee 最近爱上了 abb 型语句,比如“叠词词”、“恶心心”

leafee 拿到了一个只含有小写字母的字符串,她想知道有多少个 "abb" 型的子序列?
定义: abb 型字符串满足以下条件:

  1. 字符串长度为 3 。
  2. 字符串后两位相同。
  3. 字符串前两位不同。

✨输入描述:

第一行一个正整数 𝑛n

第二行一个长度为 𝑛n 的字符串(只包含小写字母)

1≤𝑛≤1051≤n≤105

✨输出描述:

"abb" 型的子序列个数。 

✨示例1

📍输入

6 abcbcc

📍输出

8

📍说明

共有1个abb,3个acc,4个bcc 

✨解题思路

 动态规划:

  1. 初始化计数器和数组

    • f[26]:用来记录每个字母对结果的当前贡献。
    • g[26]:用来记录每个字母的出现次数。
    • res:结果变量,用来存储符合条件的子序列个数。
    • i:用来记录当前遍历到的字符的索引。
  2. 遍历字符串

    • 对于字符串中的每一个字符e
      1. 将当前字符对结果的贡献加到res中。
      2. 更新字符e的贡献值:f[e-'a'] = f[e-'a'] + i - g[e-'a']
        • i代表当前字符之前的所有字符数。
        • g[e-'a']是当前字符e之前出现的所有字符e的次数。
        • 通过计算i - g[e-'a'],得到当前字符e之前所有非e字符的数量。
      3. 更新字符e的出现次数:g[e-'a'] += 1
      4. 增加遍历索引i

 贡献值可以理解为在这以前区间有多少个    _ x   (假设现在 i 位置字符为x) 


✨代码
 

#include <iostream>
using namespace std;int main() {int n;cin >> n;string str;cin >> str;long long res = 0;int f[26]={0};int g[26]={0};long long i=0;for(auto e:str){res+=f[e-'a'];f[e-'a']=f[e-'a']+i-g[e-'a'];g[e-'a']=g[e-'a']+1;i++;}cout << res << endl;return 0;
}


※ 如果文章对你有帮助的话,可以点赞收藏!!谢谢支持

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

相关文章:

  • SpringBoot如何实现跨域?
  • SW 草图偏移 先预选
  • 5.23 Linux中超时检测方式+模拟面试
  • MySQL数据表索引命名规范
  • python内置函数map/filter/reduce详解
  • PICO VR眼镜定制播放器使用说明文档videoplayerlib-ToB.apk
  • 基于51单片机的超声波液位测量与控制系统
  • 详细分析Element中的MessageBox基本知识(附Demo)
  • 音视频开发8 音视频中SDL的使用,SDL 在windows上环境搭建,SDL 使用 以及 常用 API说明,show YUV and play PCM
  • P1003 [NOIP2011 提高组] 铺地毯
  • C语言学习笔记之指针(一)
  • 化学中的不确定性。
  • AWS容器之Fargate
  • C#面:DataReader与Dataset有什么区别
  • 操作系统课程实验1-进程调度模拟实验
  • JVM CMS 在Full GC时针对跨代引用的优化
  • 【Makefile】Makefile 编译 Keil 工程(Linux 环境)
  • Django的视图层——1HttpResponse对象详解
  • 企业活动想找媒体报道宣传怎样联系媒体?
  • 基于ChatGPT+RPA的融资融券业务担保资产风险评价
  • 2. CSS选择器与伪类
  • tcpdump源码分析
  • 搭建Harbor镜像仓库
  • 【C/C++】Makefile文件的介绍与基本用法
  • PHP生成二维码+二维码包含logo图片展示
  • vue项目打包教程
  • 制作电子画册速成攻略,快来试试
  • 【java程序设计期末复习】chapter7 内部类和异常类
  • Windows下安装配置深度学习环境
  • 如何使用ssh将vscode 连接到服务器上,手把手指导