网易游戏(互娱)2020笔试编程题——幸运N串(python)

4.[编程题]幸运N串-研发

小A很喜欢字母N,他认为连续的N串是他的幸运串。有一天小A看到了一个全部由大写字母组成的字符串,他被允许改变最多2个大写字母(也允许不改变或者只改变1个大写字母),使得字符串中所包含的最长的连续的N串的长度最长。你能帮助他吗?

输入描述:

输入的第一行是一个正整数T(0 < T <= 20),表示有T组测试数据。
对于每一个测试数据包含一行大写字符串S(0 < |S| <= 50000,|S|表示字符串长度)。

数据范围:

20%的数据中,字符串长度不超过100;
70%的数据中,字符串长度不超过1000;
100%的数据中,字符串长度不超过50000。

输出描述:

对于每一组测试样例,输出一个整数,表示操作后包含的最长的连续N串的长度。

示例1

输入

3
NNTN
NNNNGGNNNN
NGNNNNGNNNNNNNNSNNNN

输出

4
10
18

python代码

number = input()
for i in range(int(number)):
    a = input()
    b = []
    c = 0
    for j in a:
        b.append(j)
        if len(b) - b.count('N') >= 3:
            b.pop(0)
        c = max(c, len(b))
    print(c)
  • 上面这个是我在牛客网试题下看的,测试修改成下面代码
number = input()
for i in range(int(number)):
    a = input()
    b = []
    for j in a:
        b.append(j)
        if len(b) - b.count('N') >= 3:
            b.pop(0)
    print(len(b))
  • 将代码中的c删掉,因为len(b)最小为2,即使b在字符串的中间位置取到了最长的连续N串,到字符串最后也会一直保持在这个长度,就不需要c了
  • 比如说a = "NGNGNNNNNNGGGG",当 b=NGNGNNNNNN 时长度达到了最大,继续循环 j = G ,此时b中就会存在三个非N的字符,就会一直删除b[0],b的长度就会保持在 b=NGNGNNNNNN 时的长度,循环结束输出len(b)就是结果

欢迎访问我的博客网站查看更多博客或者搜索 天健寺个人博客

你可能感兴趣的:(网易2020笔试题)