题解 | #abb#
abb
http://www.nowcoder.com/practice/0a8bbf8b9b5b4280957849ef4f240f07
统计每个字符串开始的叠词数量
while True:
try:
n = int(input())
sn = input()
dp = [0 for _ in range(n)] # 用来存放当前i坐标字符串开头的叠词数量
dic = {} # 用来存放字符串起始位置前的统计各字母数量
se = list(set(sn)) # 统计字符串中字母种类,用作字典的KEY
for i in se: # 统计各字母数量
dic[i] = sn.count(i)
for j in range(n): # 统计第j个字母开头的叠词数量
c = 0
dic[sn[j]] -= 1 # 在字典中当前字符串的统计数量减1,保证字典中的统计为当前字符串后的各字母数量
for k in dic.keys():
if k != sn[j]: # 对字典中部等于当前字符的其他欺负分别提取计算
c += dic[k]*(dic[k] - 1) / 2 # 当前字符开始与字符K组成的叠词数量为(设K的数量为n) n*(n-1)/2
dp[j] = int(c) # 统计结果添加到数组中
print(sum(dp))
except:
break