1 条题解

  • 0
    @ 2025-3-8 20:45:30

    知识点:模拟,尺取法(双指针)

    #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
    上传者