ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

校招真题练习032 连续相同字符串(头条)

2019-08-08 09:00:42  阅读:304  来源: 互联网

标签:__ string changecount 真题 maxlen 032 curleng 校招 left


连续相同字符串(编程题2)

题目描述
有一个仅包含’a’和’b’两种字符的字符串s,长度为n,每次操作可以把一个字符做一次转换(把一个’a’设置为’b’,或者把一个’b’置成’a’);但是操作的次数有上限m,问在有限的操作数范围内,能够得到最大连续的相同字符的子串的长度是多少。

输入描述:
第一行两个整数 n , m (1<=m<=n<=50000),第二行为长度为n且只包含’a’和’b’的字符串s。

输出描述:
输出在操作次数不超过 m 的情况下,能够得到的 最大连续 全’a’子串或全’b’子串的长度。

 1 def change(string,target,m,n):
 2     left = 0
 3     i = left
 4     changelist = []
 5     changecount = 0
 6     maxlen = 0
 7     i = left
 8     j = 0
 9     while i < n:
10         if string[i] == target:
11             i += 1
12         else:
13             if changecount < m:
14                 changecount += 1
15                 changelist.append(i)
16                 i += 1
17             else:
18                 curleng = i - left
19                 if curleng > maxlen:
20                     maxlen = curleng
21                 left = changelist[j] + 1
22                 j += 1
23                 changecount -= 1
24     if len(changelist) > j:
25         curleng = n - left
26         if curleng > maxlen:
27             maxlen = curleng
28     return maxlen
29 
30 
31 def main():
32     ary1 = list(map(int,input().split()))
33     n,m = ary1[0],ary1[1]
34     string = input().strip()
35     c1 = change(string,'b',m,n)
36     c2 = change(string,'a',m,n)
37     if c1 >= c2:
38         print(c1)
39     else:
40         print(c2)
41 
42 
43 if __name__ == '__main__':
44     main()

 

算法思路:双指针,滑动窗口。

依据题意,需要尝试两种转换方式:1.将'a'转换为'b',2.将'b'转换为'a'。

对于每一种转换,滑动窗口内部是完成m次转换的区域。当完成m次转换之后,计算当前区域的长度,并进行窗口的滑动。

标签:__,string,changecount,真题,maxlen,032,curleng,校招,left
来源: https://www.cnblogs.com/asenyang/p/11319066.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有