zoukankan      html  css  js  c++  java
  • CodeForces 701C They Are Everywhere (滑动窗口)

    题目链接:http://codeforces.com/problemset/problem/701/C

    题意:找到字符串中能包含所有元素的最短字符串长度。

    利用“滑动窗口”解题

    解题思路:

    1. 遍历找到所有元素进行统计,元素数sum

    2.设置两个”指针“ st、en,双重while 循环

    3.先清空dp[]数组,进行统计

    双重while

    第一个 whielt(st<n)

    {

      内部while(en<n&&sum!=sum1)//sum1统计元素个数

      {//内部while

        sum1 统计

        dp[s[en]]++ 每个元素出现的次数统计

        en++

      }

      如果sum==sum1 找到小值 ans=min(ans,en-st);

      *如果--dp[s[st]]==0,则说明 s[st] 这个元素在统计的所有元素个数中没有了,此时sum1--,即应重新统计s[st]  这个元素,以确保长度包含所有元素。【关键点】

      st++;

    }

    输出 asn 即可。

    //16.09.07 22:10

    看博再次看到滑动窗口,觉得解释的不算清晰,特补充解释下:

    AC code:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int dp[300];
     4 int main()
     5 {
     6     int n;
     7     string s;
     8     while(~scanf("%d",&n))
     9     {
    10         cin>>s;
    11         int sum=0;
    12         memset(dp,0,sizeof(dp));
    13         for(int i=0; i<n; i++)
    14         {
    15             if(!dp[s[i]])
    16             {
    17                 dp[s[i]]=1;
    18                 ++sum;
    19             }
    20         }
    21         int st,en,sum1,ans;
    22         st=en=sum1=0;
    23         ans=1<<30;
    24         memset(dp,0,sizeof(dp));
    25         while(st<n)
    26         {
    27             while(en<n&&sum!=sum1)
    28             {
    29                 if(dp[s[en]]==0)
    30                 {
    31                     sum1++;
    32                 }
    33                 dp[s[en++]]++;
    34             }
    35             if(sum==sum1)ans=min(ans,en-st);
    36             if(--dp[s[st++]]==0)sum1--;
    37         }
    38         cout<<ans<<endl;
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    如何用Django建立一个后台CRM系统02
    如何用Django建立一个后台CRM系统01
    多线程的UDP聊天器
    文件被导入时,能够直接执行的代码不需要被执行
    主动抛出异常
    python异常
    初始化动作只执行一次
    单例设计模式代码实现
    类的继承
    多态的案例演示
  • 原文地址:https://www.cnblogs.com/A--Q/p/5837391.html
Copyright © 2011-2022 走看看