import sys """ 解题 思路 https://blog.nowcoder.net/n/3bd0863ecee6487185d6b8217cc01caa 后缀和数据 suffix[i+1][j] 表示str 中字母i 位置后面对应的字母a-z出现次数 从i 后面选择与i位置 不同字母 的两个相同字母j个数cnt , C( 2,cnt)= cnt*(cnt-1)//2 所以统计 [i+1][0:26] C( 2,cnt)= cnt*(cnt-1)//2 总和 """ def sovle(): n =int(input()) s=input() sum=[ [ 0 for _ in range(26) ] for _ in range(n+1) ] # for _ in range(n) #逆序统计i位置后面的字母个数 for i in range(n-1,-1,-1): # 复制 i=1 的26个结果到i位置 #if i< n-1: for j in range(0,26): sum[i][j]=sum[i+1][j] sum[i][ ord(s[i])-ord('a')]+=1 # 加上当前字母 #print(sum) # 从0 -n 遍历 记录结果 i位置后不同字母 C(2, cnt) =cnt*(cnt-1)//2 res=0 for i in range(0,n): for j in range(0,26): #print(ord(s[i])-ord('a')) if j !=ord(s[i])-ord('a'): res+=(sum[i+1][j]*(sum[i+1][j]-1))//2 # 后缀 print(res) sovle()