题解 | #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))