1 条题解

  • 0
    @ 2024-11-1 23:14:23
    # 思路:
    # 对于字符串s中的每个字符位置i,分别计算其左侧(lhs)和右侧(rhs)与该字符不同的连续字符的数量。
    # 如果i位置左侧有连续与s[i]不同的字符,记录数量lhs;同理如果i位置右侧有连续与s[i]不同的字符,记录数量rhs。
    # 然后根据lhs和rhs计算出对结果ans的贡献,最后输出ans。
    
    n = int(input())
    s = input()
    ans = 0
    for i in range(n):
        lhs = 0
        # 判断当前位置i的前一个字符是否与当前字符不同
        if i > 0 and s[i - 1]!= s[i]:
            # 如果不同,lhs初始为1
            lhs += 1
            k = i - 2
            # 从i-2位置开始向左检查,统计与s[i - 1]相同的连续字符数量
            while k >= 0 and s[k] == s[i - 1]:
                lhs += 1
                k -= 1
        rhs = 0
        # 判断当前位置i的后一个字符是否与当前字符不同
        if i + 1 < n and s[i + 1]!= s[i]:
            # 如果不同,rhs初始为1
            rhs += 1
            k = i + 2
            # 从i+2位置开始向右检查,统计与s[i + 1]相同的连续字符数量
            while k < n and s[k] == s[i + 1]:
                rhs += 1
                k += 1
        # 计算当前位置i对结果ans的贡献并累加到ans中
        ans += lhs * rhs + max(lhs - 1, 0) + max(rhs - 1, 0)
    print(ans)
    

    这段代码的核心是通过遍历字符串中的每个位置,计算该位置两侧与该位置字符不同的连续字符数量,进而得出结果。具体步骤如下:

    1. 首先读取输入的字符串长度n和字符串s,并初始化结果变量ans为0。
    2. 对于字符串中的每个位置i
      • 计算左侧与s[i]不同的连续字符数量lhs
      • 计算右侧与s[i]不同的连续字符数量rhs
      • 根据lhsrhs计算对结果的贡献并累加到ans中。
    3. 最后输出结果ans

    信息

    ID
    3
    时间
    2000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    8
    已通过
    1
    上传者