题解 | #abb#

abb

https://www.nowcoder.com/practice/0a8bbf8b9b5b4280957849ef4f240f07

# 后缀法解决

def create_array(n, s):
    str_dict = [{},]  # 后缀字符字典 列表,添加一个空项作为辅助项。列表下标为 j 含义是 字符串 s 后 j 个字符的统计量

    for i in range(n-1, 0, -1):  # 后缀,所以从 s 的最后一项开始遍历
        dic = str_dict[-1].copy()  # s 的后 j-1 个字符的统计量

        if s[i] in dic:
            dic[s[i]] += 1  # 如果该字符在后 j-1 项中出现过,统计量 加 1
        else:
            dic[s[i]] = 1  # 添加新的统计量

        str_dict.append(dic)
    
    return str_dict


n = int(input())
s = input()

str_dict = create_array(n, s)  # 得到字符串 s 的字符统计量

s_sum = 0
for i in range(n):
    ch = s[i] 
    dic = str_dict[n-1 - i].copy()  # 字符串第 i 个字符后有 n-1 - i 个字符,对应统计量的下标

    for key in dic:
        if ord(key) - ord(ch) != 0:
            s_sum += dic[key] * (dic[key] - 1) / 2

print(int(s_sum))

全部评论

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务