问题描述
对于一个字符串 ,我们定义 的分值 为 中出现的不同的字符个数。例如f( “aba”)=2,f(“abc”)=3, f(“aaa”)=1。
现在给定一个字符串 (长度为 ),请你计算对于所有 的非空子串 ,的和是多少。
输入格式
输入一行包含一个由小写字母组成的字符串 。
输出格式
输出一个整数表示答案。
样例输入
ababc
样例输出
28
样例说明
子串 f值
a 1
ab 2
aba 2
abab 2
ababc 3
b 1
ba 2
bab 2
babc 3
a 1
ab 2
abc 3
b 1
bc 2
c 1
评测用例规模与约定
对于所有评测用例,1<=n<=100000。
说明:
如果你是用for循环的方法,肯定是超时的!
复杂度是n的平方,n能取到100000,显然不可取的,应想个更巧妙的方法,参考了网上的题解后…
以下是我的代码
str1 = input()
n = len(str1)
sum = 0
for i in range(len(str1)):
t = str1.rfind(str1[i],0,i)
if t<i:
sum += (i-t)*(n-i)
else:
sum += (i+1)*(n-i)
print(sum)