"""
输入描述:一个字符串s,只包含b和w,分别表示黑色和白色,字符串长度不超过10^5。翻转操作定义为:将字符串在某个地方切开,将两个子串同时翻转后在拼接在一起。这个操作可以任意多次
输出:经过任意翻转操作,可以得到最大的连续黑白相间的子串的长度
样例:
输入:
bwbwb
输出:
5
样例:
输入:
bwbwbbw
输出:
7
"""
"""
基本思想:翻转操作只影响字符串的首尾,如果把字符串看做是首尾相接的(环形),那么翻转操作就不会对字符串有任何的影响。先将字符串分为黑白相间的子串,然后对首尾特殊处理,最后得到最长的子串(如果内存有要求,子串分割可以使用idx标记)
"""
import sys
def str_split(string):
str_list = []
idx_start = 0
for idx in range(len(string)-1):
if string[idx+1] == string[idx]:
str_list.append(string[idx_start:idx+1])
idx_start = idx+1
str_list.append(string[idx_start:])
if len(str_list)>=2 and str_list[-1][-1] != str_list[0][0]:
str_list[0] += str_list.pop()
return str_list
def get_max_bw(string):
string_bw = str_split(string)
len_all = [len(string_bw_temp) for string_bw_temp in string_bw]
return max(len_all)
if __name__ == "__main__":
# 读取第一行的n
# n = int(sys.stdin.readline().strip())
string = sys.stdin.readline().strip()
print(get_max_bw(string))
笔试编程题汇总(1)
最新推荐文章于 2022-08-31 22:02:51 发布