对于一个字符串 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]) 的和是多少。
// Problem: 子串分值 // Contest: AcWing // URL: https://www.acwing.com/problem/content/2871/ // Memory Limit: 64 MB // Time Limit: 1000 ms int a[N]; int l[N],r[N]; map<char,int>mp; void solve(){ string s;cin>>s;ll ans=0; int len=s.size(); string tmp=" "; tmp+=s; for(int i=1;i<=len;i++){ if(mp[tmp[i]]){ l[i]=mp[tmp[i]]; mp[tmp[i]]=i; } else { l[i]=0; mp[tmp[i]]=i; } } mp.clear(); for(int i=len;i>=1;i--){ if(mp[tmp[i]]){ r[i]=mp[tmp[i]]; mp[tmp[i]]=i; } else { r[i]=len+1;; mp[tmp[i]]=i; } } for(int i=1;i<=len;i++){ ans+=(i-l[i])*(r[i]-i); } cout<<ans<<endl; }
发表于 2024-01-30 13:25阅读:25评论:0推荐:0
老师的讲解,解决了我许多问题,谢谢!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战