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

