三值字符串【CF1354B】
三值字符串
给定一个字符串 s,其中的每个字符都是 1,2 或 3。
请你求出同时包含字符 1,2,3 的 s 的最短子串的长度。
注意,子串必须是连续的。
输入格式
第一行包含整数 T,表示共有 T 组测试数据。
每组数据占一行,包含一个字符串 s,保证 s 中可能包含字符 1,2 或 3。
输出格式
每组数据输出一行,一个整数,表示符合条件的最短子串的长度。
如果不存在符合条件的子串,则输出 0。
数据范围
1≤T≤20000,
1≤|s|≤2×105,
所有 T 个输入字符串的长度之和保证不超过 2×105。
输入样例:
7
123
12222133333332
112233
332211
12121212
333333
31121
输出样例:
3
3
4
4
0
0
4
思路
双指针取长度
注意对双指针的精确定义
j:元素在区间内对答案有贡献(不冗余)
通过每次移动i在维护j得到长度i-j+1取min即为答案
代码
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int cnt[4];
int main(){
int t;
cin >> t;
while(t -- ){
string s;
cin >> s;
memset(cnt,0,sizeof cnt);
int ans = 200010;
for(int i = 0,j = 0; i <= s.size() - 1; i ++ ){
cnt[s[i]-'0']++;
while(cnt[s[j] - '0'] > 1)cnt[s[j ++] - '0'] --;
if(cnt[1] && cnt[2] && cnt[3])ans = min(ans,i-j+1);
}
if(ans == 200010)cout << 0 << '\n';
else cout << ans << '\n';
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】