思维题
题目链接
给定一个只包含 1 , 2 , 3 1,2,3 1,2,3的字符串,输出包含 1 , 2 , 3 1,2,3 1,2,3最短字串的长度
重点是三个字符的位置,我们用三个变量来定义三个位置,用一个指针遍历数组不断更新三个位置,每次满足三个位置都找到了就更新最终答案
#include<bits/stdc++.h>
using namespace std;
void solve() {
string str;cin >> str;
int n = str.size();
int a = -1, b = -1, c = -1;
int ans = 10000000;
for (int i = 0;i < n;i++) {
if (str[i] == '1')a = i;
else if (str[i] == '2')b = i;
else c = i;
if (a != -1 && b != -1 && c != -1)ans = min(ans, i - min(a, min(b, c)) + 1);
}
if (ans != 10000000)cout << ans << '\n';
else cout << 0 << '\n';
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t;cin >> t;
while (t--) {
solve();
}
return 0;
}