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

子串分值和(蓝桥杯)

写出来了,但是感觉前两年写肯定写不出来,所以做个记录~

题目描述

对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S) 为 SS 中出现的不同的字符个数。例如 f(“aba”)=2,f(“abc”)=3,f(“aaa”)=1f(“aba”)=2,f(“abc”)=3,f(“aaa”)=1。

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

输入描述

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

其中,1≤n≤1051≤n≤105。

输出描述

输出一个整数表示答案。

输入输出样例

示例 1

输入

ababc

输出

28

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
int ans=0;//最终答案
int len=0;//字符串0~i-1中,以字符串i-1结尾的子串的分值和
//记录第一次出现的位置,和最后一次出现的位置
int sta[26],endd[26];
signed main(){
  //暴力能拿一定分
  //直接暴力
  string s;
  cin>>s;
  for(int i=0;i<26;i++){
    sta[i]=-1;
    endd[i]=-1;
  }
 
  for(int i=0;i<s.size();i++){  //i作为终点
    if(sta[s[i]-'a']==-1){ //没有出现过
    sta[s[i]-'a']=i;
    endd[s[i]-'a']=i;
     //i之前所有的数据
     len+=i+1;
     ans+=len;
    }
    else{
      len+=(i-endd[s[i]-'a']);
      ans+=len;
      endd[s[i]-'a']=i;//更新记录最后出现的位置
    }
  }
  cout<<ans<<endl;
}

相关文章:

  • 【MySQL 数据库】数据类型
  • Everything 安装教程与使用教程(附安装包)
  • java+postgresql+swagger-多表关联insert操作(七)
  • 流体力学笔记
  • 体验为王:云化园区网络如何重塑用户业务零卡顿时代
  • QT控件 修改QtTreePropertyBrowser自定义属性编辑器源码,添加第一列标题勾选,按钮,右键菜单事件等功能
  • 网络缓冲区
  • OpenCV--图像平滑处理
  • 使用protobuf编译提示无法打开包括文件: ‘absl/log/absl_log.h’: No such file or directory
  • 第十四届蓝桥杯省赛B组c++——填空题201串的熵
  • AI比人脑更强,因为被植入思维模型【47】可复制化思维模型
  • LemonSqueezy: 1靶场渗透
  • OpenCV 图形API(21)逐像素操作
  • Kafka的索引设计有什么亮点
  • 利用pytorch对加噪堆叠自编码器在MNIST数据集进行训练和验证
  • linux-添加开机自启动指定脚本
  • #关于require 与 import 相关了解
  • AI爬虫?爬!(附加mcp实践教程)
  • 第十五届蓝桥杯国赛题 代码量统计-困难 解题思路
  • 【蓝桥杯】搜索算法:DFS/BFS
  • 辽宁援疆前指总指挥王敬华已任新疆塔城地委副书记
  • 以军证实空袭也门多个港口
  • 张家界一铁路致17人身亡,又有15岁女孩殒命,已开始加装护栏
  • 全国省市县国土空间总体规划已基本批复完成,进入全面实施阶段
  • “9+2”复式票,浦东购彩者拿下体彩大乐透1153万头奖
  • 圆桌丨新能源车超充技术元年,专家呼吁重视电网承载能力可能面临的结构性挑战