首页 > 其他 > 详细

C. Vasya and String (尺取法)

时间:2019-07-11 14:09:33      阅读:99      评论:0      收藏:0      [点我收藏+]

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

 

题目大意:  给你一串字符串(全由 a,b 组成) ,现在你有k次机会可以把a替换成b 或者把b替换成a ,问最长的连续一致的子序列长度

 

思路:

这道题和 Leetcode 1004 可以说是完全一样了,只是本题既可以替换a 又可以替换b ,那么我们分别考虑两种情况然后求最大就可以了

 

AC代码:

 1 #include <cstdio>
 2 #include <string>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <cstdbool>
 6 #include <string.h>
 7 #include <math.h>
 8 
 9 
10 using namespace std;
11 
12 char s[1000005];
13 int k;
14 
15 int change_a(char s[],int len)
16 {
17     int a = 0;
18     int i = 0,j = 0;
19     int sum = 0;
20     while (j<len && i<=j)
21     {
22         if (s[j] == a)
23             a++;
24         while (a > k)
25         {
26             if (s[i] == a)
27                 a--;
28             i++;
29         }
30         sum = max(sum,j-i+1);
31         j++;
32     }
33     return sum;
34 }
35 
36 int change_b(char s[],int len)
37 {
38     int b = 0;
39     int i = 0,j = 0;
40     int sum = 0;
41     while (j < len && i <= j)
42     {
43         if (s[j] == b)
44             b++;
45         while (b>k)
46         {
47             if (s[i] == b)
48                 b--;
49             i++;
50         }
51         sum = max(sum,j-i+1);
52         j++;
53     }
54     return sum;
55 }
56 
57 int main()
58 {
59     int len;
60     cin >> len >> k;
61     cin >> s ;
62     int ant = change_b(s,len);
63     int cnt = change_a(s,len);
64     printf("%d\n",max(ant,cnt));
65     return 0;
66 }

 

C. Vasya and String (尺取法)

原文:https://www.cnblogs.com/-Ackerman/p/11168864.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!