题解 | #字符串#
字符串
https://ac.nowcoder.com/acm/problem/18386
题目考点:尺取法(双指针)
题目大意:给定一个字符串,问集齐26个字母所需要的最短区间是多长。
题目分析:右指针字符串,当26个字母集齐之后移动左边界,维护最短长度即可;
代码:
#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N = 26, M = 1000010; int n, ans = M, ch[N]; string s1; bool jud() //判断26个字符是否集齐 { for(int i = 0; i < 26; i++) if(!ch[i]) return false; return true; } int main() { cin>>s1; int len = s1.length(); for(int l = 0, r = 0; r < len; r++) { ch[s1[r] - 'a'] ++ ; while(jud()) //如果集齐26个字母,维护最小值,移动左边界 { ch[s1[l] - 'a']--; ans = min(ans, r - l + 1); l++; } } cout<<ans; return 0; }
题解专栏 文章被收录于专栏
希望不断进步