3 条题解

  • 1
    @ 2024-5-27 16:54:38

    正则大法好

    import re
    
    # 读取求救者的人数
    n = int(input())
    
    # 初始化 st 数组用于存储每个求救信号 'sos' 出现次数对应的求救者名字
    st = [0] * 1000
    for i in range(1000):
        st[i] = []
    
    # 初始化变量 mx 用于记录最大的 'sos' 出现次数
    mx = 0
    for i in range(n):
        name = input()  # 读取名字
        sig = input()   # 读取求救信号
        # 使用正则表达式查找重叠的 'sos',计算出现的次数
        # 正则表达式 r'(?=(sos))' 的含义:
        #   '(?=...)' 是正向前瞻断言,它会查找紧接着条件表达式的位置
        #   '(sos)' 是要匹配的内容,写在前瞻中意味着搜索从每个字符开始检查是否接下来的字符构成 'sos'
        # 这样做将允许正则找到所有的重叠的 'sos' 模式
        num = len(re.findall(r'(?=(sos))', sig))
        # 把所有出现次数为 num 的求救者名字存储起来
        st[num].append(name)
        # 更新最大次数
        mx = max(mx, num)
    
    # 输出所有出现次数最多的求救者的名字
    for name in st[mx]:
        print(name, end=' ')
    
    print()
    # 输出最大次数
    print(mx)
    
    • @ 2024-5-28 9:06:26

      这道题最好的解法

    • @ 2024-6-4 9:33:52

      虽然但是正则本质也是O(n)O(n)遍历匹配

信息

ID
932
时间
1000ms
内存
256MiB
难度
7
标签
递交数
842
已通过
173
上传者