双指针
利用双指针维护一个[l,r]区间,利用一个cnt数组来记录这段区间1,2,3字符出现的次数即可。求符合条件的区间长度最小值即可。
时间复杂度O(n)
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int t;
int cnt[4];
string s;
bool check(){
if(cnt[1] && cnt[2] && cnt[3]){
return true;
}
return false;
}
int main(){
cin >> t;
while(t--){
cin >> s;
int minn = 0x3f3f3f3f;
int len = s.size();
bool flag = false;
int l = 0,r = 0;
while(l < len){
while(r < len && !check()){
cnt[s[r] - '0'] ++;
r++;
}
if(check())minn = min(r - l,minn);
cnt[s[l] - '0'] --;
l ++ ;
}
if(minn == 0x3f3f3f3f)minn = 0;
cout << minn << endl;
}
return 0;
}