[每日一题] [NC18386] 字符串

https://ac.nowcoder.com/acm/problem/18386

题目大意:选取字符串最长的包含所有小写字母的substring的长度。

比较简单,用sliding window即可,维护一个left和right区间,每次right尽量伸长,left再减少一位。

#define MAXN 1000005
char s[MAXN];
int doit() {
  int n = strlen(s);
  // [l, r).
  int l = 0, r = 0;
  int ans = n;
  u_m<char, int> counter;
  while (l < n) {
    while (r < n) {
      if (sz(counter) == 26) {
        ans = min(ans, r - l);
        break;
      }
      counter[s[r]]++;
      ++r;
    }
    counter[s[l]]--;
    if (counter[s[l]] == 0) {
      counter.erase(s[l]);
    }
    ++l;
    if (sz(counter) == 26) {
      ans = min(ans, r - l);
    }
  }
  return ans;
}
int main(int argc, char* argv[]) {
  scanf("%s", s);
  printint(doit());
  return 0;
}
全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务