1 条题解
-
0
知识点:模拟,尺取法(双指针)
#include <bits/stdc++.h> using u32 = unsigned; using i64 = long long; using u64 = unsigned long long; using u128 = unsigned __int128; void solve() { std::string s; std::cin >> s; std::vector<int> cnt(26); int res = 0; int n = s.size() - 1; auto add = [&](char c) { if (!cnt[c - 'a']) { res++; } cnt[c - 'a']++; }; auto del = [&](char c) { cnt[c - 'a']--; if (!cnt[c - 'a']) { res--; } }; int ans = 1E9; int i = 0, j = 0; while (i <= n + 1) { if (res == 26) { ans = std::min(ans, i - j); del(s[j++]); continue; } if (i <= n) add(s[i]); i++; } if (res == 26) { ans = std::min(ans, i - j); } std::cout << ans << "\n"; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t; std::cin >> t; while (t --) { solve(); } return 0; }
- 1
信息
- ID
- 187
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 48
- 已通过
- 13
- 上传者