#P1492. 2023.08.26-OPPO第三题-塔子哥的字符串(值贡献法)
题目内容
塔子哥对于一个字符串的权值定义为一个字符串中 "tzzt"
的子串的数量。例如,"tzzt"
的权值为,"tzztzzt"
的权值为 ,"tzzzt"
的权值为 。
现在,塔子哥给你一个仅由 't'
和 'z'
构成的字符串,问你这个字符串的所有子串的权值之和。
输入描述
第一行,一个只由 't'
和 z
构成的字符串
字符串长度不超过
输出描述
一个整数,表示这个字符串的所有子串的权值之和。
样例
输入
tzztzzt
输出
8
说明
s[1,4]="tzzt"
,权值为
s[1,5]="tzztz"
,权值为
s[1,6]="tzztzz"
,权值为
s[1,7]="tzztzzt"
,权值为
s[2,7]="zztzzt"
,权值为
s[3,7]="ztzzt"
,权值为
s[4,7]="tzzt"
,权值为
权值之和为
考虑字符串中每个 tzzt
对答案的贡献。
下标从 0 开始。假设是 s[i, i+3] = "tzzt",那么这个 tzzt 对于答案的贡献为:所有 l<=i,r>=i+3 的字符串。
这样的字符串一共有 个。
累加起来即可。
时间复杂度:O(n)
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e5+100;
char a[maxn];
/**
tzztzzt
8
**/
int main(){
string s;
cin>>s;
int n=s.size();
long long int ans=0;
for(int i=0;i+4<=n;i++){
if(s.substr(i,4)=="tzzt"){
int l=i+1;
int r=n-1-(i+3)+1;
ans+=1ll*l*r;
}
}
cout<<ans<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现