[题解]CF1791D Distinct Split
题意
定义函数 表示字符串 中不同字符的数量。
现给定一个字符串 ,将它分割为两个字符串 。求出:。
思路
我们可以搞一个前缀和 和一个后缀和 ,分别表示 和 。
然后枚举分界点即可。
Code
#include <bits/stdc++.h>
#define re register
using namespace std;
const int N = 2e5 + 10,M = 230;
int T,n;
int arr[N],brr[N];
string s;
bool vis[M];
int main(){
cin >> T;
while (T--){
int ans = 0;
memset(arr,0,sizeof(arr));
memset(brr,0,sizeof(brr));
memset(vis,false,sizeof(vis));
cin >> n >> s;
s = ' ' + s;
for (re int i = 1;i <= n;i++){//前缀和
if (!vis[s[i]]){
arr[i] = arr[i - 1] + 1;
vis[s[i]] = true;
}
else arr[i] = arr[i - 1];
}
memset(vis,false,sizeof(vis));
for (re int i = n;i;i--){//后缀和
if (!vis[s[i]]){
brr[i] = brr[i + 1] + 1;
vis[s[i]] = true;
}
else brr[i] = brr[i + 1];
}
for (re int i = 0;i <= n;i++) ans = max(ans,arr[i] + brr[i + 1]);//选出 max
printf("%d\n",ans);
}
return 0;
}
作者:WaterSun
出处:https://www.cnblogs.com/WaterSun/p/18266706
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】