3624. 三值字符串
输入样例:
7
123
12222133333332
112233
332211
12121212
333333
31121
输出样例:
3
3
4
4
0
0
4
其实双指针就这一句,为什么要搞幺蛾子TT
首先l++
的操作要放在后面,其次 只要管 l指向的值有没有重复,不需要看i
while(cnt[str[l]-'1']>1)cnt[str[l]-'1']--,l++;
#include <bits/stdc++.h>
using namespace std;
int n,k,T;
signed main(){
int T;
cin>>T;
string str;
while(T--){
cin>>str;
int cnt[3]={0,0,0};
int l=0;
n=str.size();
int res=2e5+5;
for(int i=0;i<n;i++){
cnt[str[i]-'1']++;
// while(cnt[str[i]-'1']>1&&(str[i]-'1'==str[l]-'1'))l++,cnt[str[i]-'1']--;
while(cnt[str[l]-'1']>1)cnt[str[l]-'1']--,l++;//l++的操作要放在后面
if(cnt[0]&&cnt[1]&&cnt[2])res=min(res,i-l+1);
}
if(res==2e5+5)res=0;
cout<<res<<endl;
}
return 0;
}