字串分值/字串定义/字符贡献度/ord()与chr()
创始人
2025-05-30 13:20:54

题解:

首先明确子串的定义:

一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个

接下来补充两个函数:

  1. ord()将字符转换成ASCII码

  1. chr()将数字代表的ASCII码转换成字符串

接下来做题:

初步思路:采用两重for循环分割出s的所有字串,再定义一个求f(s)的函数,求出答案即可,但很显然暴力是超时的

def prime(s):dic={}for temp in s:dic[temp]=s.count(temp)res=0for key,value in dic.items():if value==1:res+=1return res
s=input()
ans=1
for i in range(len(s)-1):for j in range(i+1,len(s)+1):nums=s[i:j]ans+=prime(nums)print(prime(nums),nums)
print(ans)

所以采用网上大神的思路:

题目中比较重要的信息就是 f的值仅受到在连续字串中出现一次的字符的影响。直接统计所有子串中单个字符的个数时间上过不去,那么,我们可以考虑单个字符带来的贡献度。(核心思想:换位思考)
看样例:‘ababc’

我们看第二个a,虽然它可以处于多个子串中,但是如果这个子串里面还包含了其它a的话,那么这个’a’就不能对f的值产生贡献(使f的总和增加)了。而它每处于一个有效子串(除开它自己没有别的a的子串)中,f的总值就增加1。

第二个a:
在子串‘aba*‘中对f值无贡献 (*表示任意后续,可为空)
在子串’a’,‘ab’,‘abc’,‘ba’,‘bab’,'babc’中均对f值贡献了1,总共贡献6

所以,我们统计每一个字符处于多少个有效子串中即可计算出f的总和。

如何计算有效子串呢?

还是看刚刚的第二个’a’,它所处的子串要有效,就得不能包含别的‘a‘。那么我们先找到不包含其他’a’的最长子串:‘babc’

现在要做的就是找到这个串中包含’a’的连续子串的个数,如何找呢?

可以这样考虑,由于要包含’a‘,那么子串中a前面的字符选择就有:

‘b’,’’(空) 共2种情况

后面的字符选择有:

‘’(空),‘b’,‘bc’ 共3种情况

那么子串的情况就有 2×3=6种。( 即(a前面的字符个数+1) × ( a后面的字符个数+1)或 (该’a’的下标 - 上个‘a’的下标)×(下个’a’的下标 - 该’a’的下标))

要找所有a的贡献,就可以找到所有a的下标:

0,2

首尾再分别加上 -1 和 输入字符串S的长度(处理首尾的‘a’):

-1,0,2,5

三个一组,即(-1,0,2)和(0,2,5)两组。计算 (0-(-1))×(2-0)+(2-0)×(5-2)即为这两个a的贡献总值。

所以搞起来,这里我们怎么收集每个字符的位置呢,先从a到z依次判断循环,判断字母是否在字符串里,若在,依次收集它的下标,计算贡献度

import os
import sys# 请在此输入您的代码
s=input()
node="a"
ans=0
while ord(node)<=ord("z"):li=[]if node in s:li.append(-1)for i in range(len(s)):if node==s[i]:li.append(i)li.append(len(s))for i in range(1,len(li)-1):ans+=(li[i]-li[i-1])*(li[i+1]-li[i])node=chr(ord(node)+1)
print(ans)

相关内容

热门资讯

【前端八股文】JavaScri... 文章目录Set概念与arr的比较属性和方法并集、交集、差集Map概念属性和方法String用索引值和...
海康硬盘录像机接入RTSP/o... EasyNVR安防视频云服务平台可支持设备通过RTSP/Onvif协议接入平台,能提供...
在混合劳动力时代如何避免网络安... 在混合劳动力时代如何避免安全网络风险 三年多来,混合工作一直是工作生活中不可或缺的一...
2023还不懂Jmeter接口... 这里介绍的Jmeter接口测试的的实战,如果文章内容没遇看懂的话,我这边...
基于4G/5G弱网聚合的多链路... 基于4G/5G多卡聚合(弱网聚合)的智能融合通信设备技术亮点 增强带宽提供可靠连接 通过将多个有线和...
如何使用Synplify综合v... 文章目录使用Synplify综合的好处synplify的教程方法1(无效)...
2023年全国最新高校辅导员精... 百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等ÿ...
2022年18个值得期待的Le... 有数百个独特的LearnDash附加组件,您可能很难选择您的LearnDash LMS...
【java基础】Stream流... 文章目录基本介绍流的创建流的各种常见操作forEach方法filter方法map方法peek方法fl...
javaweb高校行政办公自动... 本课题基于我国高校管理信息化建设现状,结合在实际工作中所遇到的问题和收获,...
一款专门为自动化测试打造的集成... 你好,我是不二。 随着行业内卷越来越严重,自动化测试已成为测试工程师的...
【go-zero】golang... 一、casbin 概览 1、casbin基本了解 casbin的GitHub:https://git...
现在开发低代码平台算晚吗? 现在开发低代码平台算晚吗?作为低代码的亲戚——零代码厂商,这篇就以“厂商...
【JavaWeb】书城项目(2... 222.书城项目-第三阶段:修改所有html页面为jsp页面 改成jsp页面之后&#x...
基于jeecgboot的大屏设...      通过前面设计好数据源后,就要进行数据集的设计了。      一、还是在onl...
Linux命令小技巧:显示文件... 工作中会有很多千奇百怪的需求,比如:如何在 Linux 命令行中快速找到...
【找工作】-- 大数据工程师找... 目录 1.前言 2.找工作的理论知识 2.1 分析个人特征 2.1.1 你自身优势是什么?
C++基础算法④——排序算法(... 排序算法 1.插入排序 2.桶排序 1.插入排序 基本思想:将初始数据分为有序部分和...
nginx快速入门.跟学B站n... nginx快速入门.跟学B站nginx一小时精讲课程笔记nginx简介及环境准备nginx简介环境准...
ORACLE存过互相调用之间事... 今天在问答区看到一个问题是 假如有procedureA、procedureB和procedureC&...
基于java中Springbo... 基于java中Springboot框影视影院订票选座管理系统 开发语言:Java 框...
CVE-2018-18086 最近闲来无事,看到青少年CTF平台,感觉对新手还是比较友好的࿰...
【深度学习】基于Hough变化... 💥💥💞💞欢迎来到本博客❤️❤️&#x...
AtCoder Beginne... D - Bank (atcoder.jp)         (1)题目大...
VxWorkds 内存管理(3... 虚拟内存管理 对于带MMU的目标板,VxWorks提供虚拟内存的支持,V...
【微服务】—— 统一网关Gat... 文章目录1. 概述1.1 为什么需要网关1.2 SpringCloud Gateway2. gate...
文心一言实际测试——让我们拿实... 文心一言实际测试——让我们拿实际说好坏 4月16日,文心一言闪亮登场,就...
Postgresql源码(10... 0 总结 (可以最后看) PLpgSQL_execstate中包含的两个...
网络技术与应用概论(上)——“... 各位CSDN的uu们你们好呀,今天,小雅兰的内容依旧是计算机网络的一些知...
Yolov5 QAT量化训练 1. QAT介绍 从 模型量化(5): 敏感层分析可以看出来,对于yolov5-nano模型,对最后...