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

子串分值【第十一届】【省赛】【A组】

问题描述

对于一个字符串 s,我们定义 s 的分值 f(s) 为 s 中恰好出现一次的字符个数。例如 f("aba")=1,f("abc")=3, f("aaa")=0。

现在给定一个字符串 s[0..n−1](长度为 n),请你计算对于所有 s 的非空子串 s[i..j](0≤i≤j<n),f(s[i..j])的和是多少。

输入格式

输入一行包含一个由小写字母组成的字符串 s。

输出格式

输出一个整数表示答案。

样例输入

ababc

样例输出

21

样例说明

子串  f值
a     1
ab    2
aba   1
abab  0
ababc 1b    1ba   2bab  1babc 2a   1ab  2abc 3b  1bc 2c 1

评测用例规模与约定

对于 20% 的评测用例,1≤n≤10;

对于 40% 的评测用例,1≤n≤100;

对于 50% 的评测用例,1≤n≤1000;

对于 60% 的评测用例,1≤n≤10000;

对于所有评测用例,1≤n≤100000。

题解:

        通俗地说,题目的要求就是给定一个字符串,要求求出这个字符串所有子串的分值,而对于一个字符串来说,它的分值就等于自身包含的所有字符中出现且仅出现了一次的字符个数

        顺着题意来的话,多数人应该会想要把给定字符串的子串全部枚举出来,然后再数每个子串中只出现了一次的字符的个数,这样做需要枚举所有的左右边界,计算的时间复杂度为O(n^2),必然会超时。

        下面介绍的是O(n)的做法:

        题目要求的分值是所有子串分值的总和,并且对于相同的字母a,如果它在不同的位置,它也算是不同的字母,比如给定字符串“aba”,他有子串‘a'和‘a’,两个‘a’在不同的位置。所以我们不需要计算所有子串的分值,只需要计算每一个字母作为只出现一次的字符时,包含了该字母的子串的个数,假如说现在给定一个字符串“abcadcada”,现在讨论字母a的分值,则可以把该字符串看成“a..bc..a..dc..a..d..a”,则对于第二个字母a,它的有效子串的个数9,分别为bca,ca,a,bcad,cad,ad,bcadc,cadc,adc;其实同样也是枚举左右边界,左边界有三种选择b、c、a,右边界有三种选择a、d、c,两两组合,组合数为3*3=9。对于其它字母也是同样的计算有效子串的个数,最终求解它们的和。

      用一个数组pre[]预处理位于i左侧的和第i个字母相同的最近的一个字母的位置,“a..bc..a..dc..a..d..a”,对于第二个a来说,它是第四个字符,所以pre[4]=1;用一个数组next[]预处理位于i右侧的和第i个字母相同的最近的一个字母的位置,对于第二个a来说,next[4]=7.

        所以左边界的选择数其实就等于“a..bc..a..dc..a..d..a”中bca的长度,右边界的选择数就等于“a..bc..a..dc..a..d..a”中adc的长度,转化为代码就是i - pre[i]和next[i] - i,将两者相乘,得到第二个子串的有效子串数。

        在预处理pre和next数组时,会借助一个idx数组,由于题中给出的字符串都由小写字母组成,我们可以把每个字母都通过ascii码相减转化为数字也就是,x-'a',例如,‘b’-‘a’=1。所以idx[1]就表示上一个b出现的位置。

 结合代码:

#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10, M = 50;
int pre[N], nex[N], idx[M];int main()
{string s; cin >> s;int len = s.size();s = ' ' + s;//计算pre[i]for (int i = 1; i <= len; i++) {pre[i] = idx[s[i] - 'a'];idx[s[i] - 'a'] = i;}//初始化右超界为n+1for (int i = 0; i < 26; i++) {idx[i] = len + 1;}//计算next[i]for (int i = len; i > 0; i--) {nex[i] = idx[s[i] - 'a'];idx[s[i] - 'a'] = i;}ll ans = 0;for (int i = 1; i <= len; i++) {ans += (i - pre[i]) * (nex[i] - i);}cout << ans;return 0;
}

相关文章:

子串分值【第十一届】【省赛】【A组】

问题描述 对于一个字符串 s&#xff0c;我们定义 s 的分值 f(s) 为 s 中恰好出现一次的字符个数。例如 f("aba")1&#xff0c;f("abc")3, f("aaa")0。 现在给定一个字符串 s[0..n−1]&#xff08;长度为 n&#xff09;&#xff0c;请你计算对于…...

SpringCloud 中 Config、Bus、Stream、Sleuth

文章目录&#x1f68f; 第十三章 分布式配置中心&#x1f6ac; 一、Config 概述&#x1f6ac; 二、Config 快速入门&#x1f6ad; config-server&#xff1a;&#x1f6f9; 1、使用gitee创建远程仓库&#xff0c;上传配置文件&#x1f6f9; 2、导入 config-server 依赖&#x1…...

Quantum 构建工具使用新的 TTP 投递 Agent Tesla

Zscaler 的研究人员发现暗网上正在出售名为 Quantum Builder 的构建工具&#xff0c;该工具可以投递 .NET 远控木马 Agent Tesla。与过去的攻击行动相比&#xff0c;本次攻击转向使用 LNK 文件。 Quantum Builder 能够创建恶意文件&#xff0c;如 LNK、HTA 与 PowerShell&…...

浏览器中的 JavaScript 执行机制

思维导图 本文为反复学习极客时间-《浏览器的工作原理与实践》-浏览器中的 JavaScript 执行机制章节中的一些思考与记录。 一些重要概念 变量提升 所谓的变量提升&#xff0c;是指在 JavaScript 代码执行过程中&#xff0c;JavaScript 引擎把变量的声明部分和函数的声明部分…...

kafka集群搭建及问题

一、zookeeper集群搭建 1、创建文件夹 cd /home mkdir zookeeper 2、下载 cd zookeeper wget https://downloads.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz 解压到当前文件夹 tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz 文件夹重命…...

不要忽视web渗透测试在项目中起到的重要性

在当前数字化环境中&#xff0c;IT的一个里程碑式增长便是公司组织和企业数字化。为了扩大市场范围和方便业务&#xff0c;许多组织都在转向互联网。这导致了一股新的商业浪潮&#xff0c;它创造了网络空间中的商业环境。通过这种方式&#xff0c;公司和客户的官方或机密文件都…...

Early Stopping中基于测试集(而非验证集)上的表现选取模型的讨论

论文中一般都是用在验证集上效果最好的模型去预测测试集&#xff0c;多次预测的结果取平均计算准确率或者mAP值&#xff0c;而不是单纯的取一次验证集最好的结果作为论文的结果。如果你在写论文的过程中&#xff0c;把测试集当做验证集去验证的话&#xff0c;这其实是作假的&am…...

appium ios真机自动化环境搭建运行(送源码)

appium ios真机自动化环境搭建&运行&#xff08;送源码&#xff09; 目录&#xff1a;导读 &#xff08;1&#xff09;安装JDK&#xff0c;并配置环境变量&#xff0c;方法如下&#xff1a; &#xff08;2&#xff09;安装Xcode、Xcode commandline tools和iOS模拟器 &…...

米尔基于ARM嵌入式核心板的电池管理系统(BMS)

BMS全称是Battery Management System&#xff0c;电池管理系统。它是配合监控储能电池状态的设备&#xff0c;主要就是为了智能化管理及维护各个电池单元&#xff0c;防止电池出现过充电和过放电&#xff0c;延长电池的使用寿命&#xff0c;监控电池的状态。 图片摘自网络 电池…...

Java后端项目IDEA配置代码规范检查,使用checkStyle实现

最近的Java后端项目想实现代码的规范检查&#xff0c;调研了一圈&#xff0c;终于找到了简单的方式实现&#xff1a;以下是常见的几种方案&#xff1a; 1、在客户端做 git hook&#xff0c;主要是用 pre-commit 这个钩子。前端项目中常见的 husky 就是基于此实现的。但缺点也很…...

Nginx_4

Nginx负载均衡 负载均衡概述 早期的网站流量和业务功能都比较简单&#xff0c;单台服务器足以满足基本的需求&#xff0c;但是随着互联网的发展&#xff0c;业务流量越来越大并且业务逻辑也跟着越来越复杂&#xff0c;单台服务器的性能及单点故障问题就凸显出来了&#xff0c…...

linux Ubuntu KUbuntu 系统安装相关

系统安装 本来想快到中午的时候调试一下服务器上的http请求接收代码。我的电脑上装的是kali的U盘系统&#xff0c;然后我的U盘居然找不到了(然后之前安装的系统不知道是否是写入软件的原因&#xff0c;没办法解析DNS,我都用的转发的,这让我体验非常差。kali的系统工具很多&…...

个人信息保护认证

个人信息保护认证是证明个人信息处理者在认证范围内开展的个人信息收集、存储、使用、加工、传输、提供、公开、删除以及跨境等处理活动符合认证依据标准要求。适用范围 本规则依据《中华人民共和国认证认可条例》制定&#xff0c;规定了对个人信息处理者开展个人信息收集、存储…...

Negative Prompt in Stable Diffusion

必读链接&#xff1a;https://www.reddit.com/r/StableDiffusion/comments/z7salo/with_the_right_prompt_stable_diffusion_20_can_do/ A lot of people have noticed that Negative Prompt works wonders in 2.0, and works even better in 2.1. Negative hints are the op…...

MLX90316KGO-BDG-100-RE传感器 旋转位置 角度测量

介绍MLX90316是Tria⊗is旋转位置传感器&#xff0c;提供在设备表面旋转的小偶极磁铁(轴端磁铁)的绝对角位置。得益于其表面的集成磁集中器(IMC)&#xff0c;单片设备以非接触式方式感知应用磁通量密度的水平分量。这种独特的传感原理应用于旋转位置传感器&#xff0c;可在机械(…...

Reflections反射包在springboot jar环境下扫描不到class排查过程

需求&#xff1a; 要实现指定pkg&#xff08;如com.qiqitrue.test.pojo&#xff09;扫描包下所有class类信息&#xff1a;使用代码如下 使用的版本&#xff1a;0.10.2&#xff08;截至目前是最新版&#xff09;发现只能在idea编译期间可以获取得到&#xff08;也就是在开发阶段…...

黑马】后台项目171集

将近一个月没有练习了&#xff0c;找到之后果然打不开出了问题【问题】运行代码打开网页后&#xff0c;发现不能正常登录&#xff0c;一开始还以为是密码记错了&#xff0c;后来发现是数据库没有正常启动&#xff0c;phpstudy中的数据库一直是启动状态&#xff0c;关闭不了。【…...

Qt 5 架构和特点

Qt 5 模块构架&#xff1a; 模块&#xff1a;功能&#xff1a;Qt CoreQt 5 的核心类库&#xff0c;每个模块都建立在Core上Qt GUI图形用户界面开发的最基础的类库Qt Widgets提供c用户界面部件&#xff08;是对Qt GUI的拓展&#xff09;Qt SQL对数据库进行操作Qt Multimedia、…...

转换符说明使用方法(在printf函数中)

目录 一些常见的转换说明及打印结果&#xff1a; printf&#xff08;&#xff09;的转换说明修饰符 printf&#xff08;&#xff09;函数打印数据指令时要与代打印数据的类型相匹配才行。 如%d %c %ld......这些符号叫做转换说明。代表着数据转化成显示的形式。 一些常见的…...

针灸-基本任脉督脉

这里写自定义目录标题 丈量 同身丈下针深浅一般入穴的方法成人 幼儿 不同入穴方式现代常用针概念十二经 纳天干**天干**地支表里关系筋络任脉中脘穴:梅花灸巨阙穴廉泉穴督脉长强腰俞命门阳关悬枢脊中筋缩眼诊 癫痫至阳消渴...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...