题目描述:
连续N串被认为是幸运串,给一个全部由大写字母组成的字符串,允许改变最多两个大写字母(也允许不改变或改变1个大写字母),
是的字符串中包含的最长的连续N串的长度最大。
输入:T 表示有T组用例
每一行用例包含一行大写字符串S(0<|S|<50000,|S|为字符串长度
输出:
每一个测试用例,输出一个整数,表示操作后包含的最长连续N串的长度
比如:
输入
3
NNGN
NNNNGGNNNN
NGNNNNGNNNNNNNNSNNNN
输出:
4
10
18
思路:
双指针,滑动窗口,当窗口内非N小于2的时候,可以一直更新最大N串的长度,当非N串大于2时,滑动窗口左指针,直到非N串数目小于2,然后更新最大长度。
import sys
def count(line):
# 左边界
l = 0
count_n = 0 #用来统计当前窗口内N的个数
res = 0
for r, char in enumerate(line):
if char == 'N':
count_n += 1
# 最多2个改变:r-l+1表示窗口大小,在窗口大小中如果非N的数目大于2,则滑动窗口左指针,直到窗口内的非N小于2
while r - l + 1 - count_n > 2:
if line[l] == 'N':
count_n -= 1
l += 1
res = max(res, r - l + 1)
return res
if __name__ == "__main__":
# 读取第一行的n
n = int(sys.stdin.readline().strip())
ans = []
for i in range(n):
# 读取每一行
v = str(sys.stdin.readline().strip())
ans.append(count(v))
for i in ans:
print(i)