蓝桥杯寒假集训第五天(子串分值和)

news/2025/1/15 14:00:42/

没有白走的路,每一步都算数🎈🎈🎈

题目描述:

输入一个字符串,然后计算所有连续子串中没有重复字母的个数

输入描述:

第一行:

一个字符串

输出描述:

所有子串中没有重复字母的个数

样例输入输出:

样例输入:

ababc

样例输出:

28

算法讲解:

理论知识

  1. 先统计字符串中每个字母在所有可能出现的子串中的个数
  2. 将每个字母出现的次数相加即可
  3. AC代码
#子串分值和
import os
import sys
s = input()
count = 0
a = [-1 for i in range(26)]
for i in range(len(s)):index = ord(s[i])-ord('a')count+=(len(s)-i)*(i-a[index])a[index] = iprint(count) 

图解文说:

以测试案例ababc为例:

ababc

  • 子串中包含a字母的串的个数有5个,分别为:a,ab,aba,abab,ababc

 

 第一个a的字母的前面没有字母,那么后面的b,ba,bab,babc都能和第一个a链接形成一个新的子串

  • 子串中包含第一个b字母的串的个数有4*2 = 8个

第一组:b,bc,bcb,bcbc

第二组:ab,aba,abab,ababc

为什么会有两组,因为b的位置在第二个,前面有一个a可以再次拼接

  • 子串中包含第二个a字母的串的个数有3*2 = 6个

第一组:a,b,c

第二组:ba,bab,babc

为什么会是两组,因为a的位置在第三个,前面有一个b可以再次拼接,但是前面的a不能再次计算,会重复

  • 子串中包含第二个b字母的串的个数为2*2 = 4个

第一组:b,bc

第二组:ab,abc

上述同理

  • 子串中包含第一个字母c的串的个数为1*5 = 5个,分别为:c,bc,abc,babc,ababc

上述同理

统计可得5+8+6+4+5 =28

现在的这段代码的意思也很明了。

index = ord(s[i])-ord('a')
count+=(len(s)-i)*(i-a[index])

这段代码的第一行的ord是为了得到字母的ASCII码值,然后(len(s)-i)即为默认都会有的长度,会随着字母在字符串中的位置增大而减小,(i-a[index])即表示组数。两者的乘积即为此字母在所有字符子串中出现的个数。

最后累计,就为所输出的值

每日一句

摘自《《晚熟的人》》:

人类的幸福是建立在痛苦基础上的,美好的事物之所以美好,是因为丑陋事物的存在。


http://www.ppmy.cn/news/8961.html

相关文章

14---实现文件上传和下载(头像上传功能)

1、建Files表 接下来开始完成文件管理的内容,首先是数据库建Files表 DROP TABLE IF EXISTS file;CREATE TABLE file (id int(11) NOT NULL AUTO_INCREMENT COMMENT id,name varchar(255) DEFAULT NULL COMMENT 文件名称,type varchar(255) DEFAULT NULL COMMENT 文…

数字调制系列:如何理解IQ ?

最近在筹划写一系列关于数字IQ 调制的短文,以帮助初学者能够更好地理解和掌握。虽然IQ 调制技术已经非常广泛地应用于各种无线通信应用中,但是究其细节,仍有很多人存在疑惑,尤其对于初学者。作者从事测试工作多年,对IQ…

深入理解Linux网络:第三章-内核是如何与用户进程协作的

本章主要讲用户进程接收并处理数据,主要是介绍,同步阻塞和多路IO复用方案。 同步阻塞 一个进程维护一个链接,同时为了等待数据到来需要阻塞进程,还要切换进程上下文。 创建Socket进入内核态,开始 recv data没有当前s…

代码随想录算法训练营No7 |LeetCode454.四数相加II 383. 赎金信15. 三数之和18. 四数之和

哈希表2今天开始哈希表第二天做题&#xff0c;今天感觉有点难度&#xff01; 454.四数相加II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums…

Java 并发编程知识总结【五】

6. 线程中断与 LockSupport 6.1 线程中断机制 大厂&#xff08;蚂蚁金服&#xff09;面试题&#xff1a; 什么是中断&#xff1f; 首先&#xff0c;一个线程不应该由其他线程来强制中断或停止&#xff0c;而是应该由线程自己自行停止。所以&#xff0c;Thread.stop, Thread.…

阴道菌群——贯穿女性一生

阴道微生物组是一个复杂而动态的微生态系统&#xff0c;在女性月经周期和女性的一生中不断发生波动。 在过去几年中&#xff0c;对阴道微生物群关注随着测序技术的发展和应用逐渐广泛和突出&#xff0c;有关以往传统正常和异常阴道微生物组的知识也发生了变化。培养技术可能不再…

Java ——jdk(复习)

jdk 文件&#xff1a; bin 该路径下存放了各种工具命令&#xff0c; 其中重要的有javac 和Java conf&#xff1a; 改路径下存放了相关配置文件 include&#xff1a; 该路径下存放了一些平台特定的头文件 jmods; 该路径下存放了各种模块。 legal&#xff1a; 该路径下存放了各模…

java 枚举类型

1. Java 枚举类型 枚举类型是 Java 中一种类型&#xff0c;它允许您将一组常量声明在单独的类型中。枚举类型的每个实例都是这个类型的唯一实例。 例如&#xff0c;您可以使用枚举类型来表示四个季节&#xff1a; public enum Season {SPRING, SUMMER, FALL, WINTER }您可以…