传智杯 第六届—E

news2024/11/26 8:42:12

题目描述:

        leafee 最近爱上了 abb 型语句,比如“叠词词”、“恶心心”。 leafee 拿到了一个只含有小写字母的字符串,她想知道有多少个 "abb" 型的子序列?

定义: abb 型字符串满足以下条件:

  1. 字符串长度为 3 。

  2. 字符串后两位相同。

  3. 字符串前两位不同。

输入描述:

        第一行一个正整数 n

        第二行一个长度为 n 的字符串(只包含小写字母)(1≤n≤10^5)

输出描述:

"abb" 型的子序列个数。 

示例1

输入:

6
abcbcc

输出:

8

说明:

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

示例2

输入:

4
abbb

输出:

3

解题思路:

        本题是求字符串中所以的abb序列,我们采用的方法是先将字符串中的所有字符的个数记录下来,分别存储在char_number数组的对应位置,例如字符a的个数存储在char_number[0]的位置。然后依次遍历整个字符串,找到该字符后面所有字符的个数(char_number),当某个字符与该字符不同且其个数>2,那么就会产生以该字符为首的abb序列,其个数为C_{4}^{2},然后再将该字符所对应的char_number数-1,代表后面该字符的个数-1,最终循环结束过后,就可以得到所以的序列个数。

注意:

        ①当字符串长度过大时,可能会导致最终计算得到的序列个数较大,所以不能采用int型来记录序列个数,可以采用long long型来记录序列个数;

        ②本题的问题是求得字符串中所有的序列,而不是连续的序列abb;

        ③采用3个循环得到的运行会超时,所以最多只能采用两个循环。

代码:

#include<iostream>
using namespace std;
int main()
{
    //创建一维动态数组
    int num;   //用于存储字符的个数
    cin>>num;
    char *ch = new char[num];
    
    //输入字符
    for(int i=0;i<num;i++)
    {
        cin>>ch[i];
    }
    
    //查找
    long long total = 0;    //用于记录abb型序列的个数
    int char_number[27] = {0};
    
    //记录每个字符的个数
    for(int i=0;i<num;i++)
    {
        //将每个字符对应的数组下标i所对应的值+1,例如a对应数组下标0,若ch[j]='a',则char_number[0]++
        char_number[ch[i]-97]++;
    }    
        
    //若j后面含有n个相同的字符,则会构成n-1个abb序列(其中n>1)
    for(int j=0;j<num-2;j++)
    {
        for(int k=0;k<26;k++)
        {
            if(char_number[k] > 1 && k != int(ch[j]-97))
            {
                total += char_number[k] * (char_number[k]-1) / 2;
            }
        }
        //将这个字符在数组中的个数-1(用于记录在这个字符后面的各个字符个数)
        char_number[int(ch[j]-97)]--;
    }
    
    cout<<total<<endl;
    system("pause");
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2208435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JQuery基本操作(一)

获取表单元素的值 $(选择器).val(); //获取 $(选择器).val(值); //赋值 <body><div>用户名&#xff1a;<input type"text" id"userName"/><button id"get">获取值</button><button id"set">设…

GDAL:windows安装GDA

GDAL&#xff1a;windows安装GDA gdal 中文版官网文档地址&#xff1a;https://www.osgeo.cn/gdal/ 英文官方文档地址&#xff1a;https://www.gisinternals.com/release.php GDAL&#xff08;Geospatial Data Abstraction Library&#xff09;是一个开源的地理空间数据处理库…

【零基础学懂算法】:动态规划算法

前言&#xff1a;本系列文章旨在介绍笔试题中常见的算法&#xff0c;面向算法零基础小白&#xff0c;以最简单直白的语言方便你更快的理解算法原理和使用方法。 目录 一.算法思想与原理 1. 什么是状态&#xff1f; 2. 什么是状态转移方程&#xff1f; 二.动态规划做题步骤 …

umi build 打包后production工程发布到xampp或node服务, 代理proxy的设置流程;

umi发布打包会有代理问题&#xff0c;官方没给出具体操作步骤&#xff1b;下面介绍两种运行环境proxy的设置方法&#xff1b; 核心问题&#xff0c;为什么本地dev环境可以代理成功&#xff0c;而放在服务器或xampp上&#xff0c;或nginx 上就不能正常访问其它端口或链接&#…

光明乳业乳品四厂勇闯TPM世界级奖终审,开创中国乳品行业新纪元

近日&#xff0c;中国乳品行业的标志性事件在光明乳业乳品四厂隆重上演&#xff0c;该厂迎来了TPM&#xff08;全面生产维护&#xff09;世界级奖项的终审评审&#xff0c;这不仅是光明乳业发展历程中的重大突破&#xff0c;也是中国乳品行业首次冲击该领域最高荣誉——TPM世界…

另一个ssh server, handy-sshd

Handy-SSHD 是一个轻量级、高性能的 SSH 服务器解决方案&#xff0c;旨在为开发者和系统管理员提供便捷的远程访问功能。它基于现代加密技术&#xff0c;确保数据传输的安全性和保密性。Handy-SSHD 具有简单易用的配置选项&#xff0c;支持多种认证方式&#xff0c;包括密码和公…

光伏项目难管理的问题如何解决?

1.数字化管理平台的应用 数字化是当前解决光伏项目管理难题的关键手段之一。通过建立统一的数字化管理平台&#xff0c;可以实现对光伏电站的远程监控、数据分析、故障预警及运维调度等功能。这类平台通常集成有智能算法&#xff0c;能够实时分析电站运行数据&#xff0c;及时…

【Python】 列表解析 语法 实例展示 说明统统一顿明白!!!

列表解析 根据已有列表&#xff0c;高效创建新列表的方式。 列表解析是Python迭代机制的一种应用&#xff0c;它常用于实现创建新的列表&#xff0c;因此用在[]中。 语法&#xff1a; [expression for iter_val in iterable] [expression for iter_val in iterable if con…

动态规划——多状态动态规划问题

目录 一、打家劫舍 二、打家劫舍 II 三、删除并获得点数 四、粉刷房子 五、买卖股票的最佳时机含冷冻期 六、买卖股票的最佳时机含手续费 七、买卖股票的最佳时机III 八、买卖股票的最佳时机IV 一、打家劫舍 打家劫舍 第一步&#xff1a;确定状态表示 当我们每次…

navicat下载教程(包会的)

官网地址&#xff1a;Navicat | 下载 Navicat Premium 14 天免费 Windows、macOS 和 Linux 的试用版 第三方官网&#xff1a;https://pan.baidu.com/s/1kTgxwX84TPEqVfals38Mvw 一、下载navicat安装包 步骤1---试用版本 步骤2---下载windws系统的navicat 步骤3---查看安装…

ES6总结

1.let和const以及与var区别 1.1 作用域 var&#xff1a; 变量提升&#xff08;Hoisting&#xff09;&#xff1a;var 声明的变量会被提升到其作用域的顶部&#xff0c;但赋值不会提升。这意味着你可以在声明之前引用该变量&#xff08;但会得到 undefined&#xff09;。 con…

闯关leetcode——88. Merge Sorted Array

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/merge-sorted-array/description/ 内容 You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements …

计量校准公司对校准工程师,会有什么资质要求?

计量校准是指利用一些计量校准工具&#xff0c;对机器、仪器等进行测量和校准。来实现基本功能的正常使用。计量校准安排&#xff0c;是指根据委托方的要求&#xff0c;按照计量器具校准标准&#xff0c;向社会提供计量器具校准服务的安排。今天&#xff0c;我们就来看看计量校…

Django的请求与响应

Django的请求与响应 1、常见的请求2、常见的响应3、案例 1、常见的请求 函数的参数request是一个对象&#xff0c;封装了用户发送过来的所有请求相关数据。 get请求一般用来请求获取数据&#xff0c;get请求也可以传参到后台&#xff0c;但是传递的参数显示在地址栏。 post请求…

INDEMIND:扫地机器人,保“鲜”不保“熟”

从家庭“必备”到边角“鸡肋”。 新鲜却不保“熟” 作为新时代的网红产品&#xff0c;扫地机器人成为了很多装修攻略中的必备单品&#xff0c;但当年轻人真正使用后&#xff0c;心中却不免疑问&#xff0c;这真的是自己听到的那个“六边形战士”&#xff1f; 与所畅想的“甩手…

基于yolov8、yolov5的PCB板缺陷检测系统(含UI界面、数据集、训练好的模型、Python代码)

blog.csdnimg.cn/direct/6f53422ed9fd44dc8daad6dc5481c4c9.png) 项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型…

无人机之视觉技术篇

一、视觉传感器的类型 摄像头&#xff1a; 最常见的视觉传感器&#xff0c;能够捕捉可见光图像和视频。 通过单目、双目或多目摄像头的组合&#xff0c;无人机能够实现立体视觉&#xff0c;从而估算距离、深度&#xff0c;并进行物体识别和追踪。 红外传感器&#xff1a; …

猿人学— 第一届第1题(解题思路附源码)

猿人学 — 第1届第1题&#xff08;解题思路附源码&#xff09; F12进入开发者工具—> 发现停止在debugger处 —> 右键点击Never pause here后下一步 翻页&#xff0c;抓包后发现请求携带page和m两个参数&#xff0c;page应该就是页数&#xff0c;m则需要逆向 依次查找…

24.6 监控系统在采集侧对接运维平台

本节重点介绍 : 监控系统在采集侧对接运维平台 服务树充当监控系统的上游数据提供者在运维平台上 可以配置采集任务 exporter改造成探针型将给exporter传参和修改prometheus scrape配置等操作页面化 监控系统在采集侧对接运维平台 服务树充当监控系统的上游数据提供者在运…

web 0基础第二节 列表标签

1.有序列表 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>有序列表 比较重要</title>…