15228. 三月精和子序列

【题目描述】
桑尼·米尔克、露娜·切露德和斯塔·萨菲雅经常在一起玩耍。
有一天,她们拿到了一个长度为n的字符串s。字符串里只有小写字母。
她们依次选取字符串的三个不同位置,各拿一个字母,如果这三个字母两两之间不相同,那么她们就会很开心。
并且拿取的顺序是,露娜必须在桑尼的后面拿,斯塔必须在露娜的后面拿。
用数学语言描述就是,取三个不同角标,i,j,k,满足i<j<k,且s[i],s[j],s[k]互不相等即可。或者说,取一个长度为3的子序列,满足三个字母各不相同。
请注意,只要两个方案中3个角标有任意一个不同,则视为两个不同的方案。
那么问题来了,有多少种方案,可以让她们变得开心?由于方案数可能过大,请对1000000007取模。
【输入】
第一行一个正整数n(3≤n≤1000000)
第二行是一个长度为n的字符串。保证字符串仅由小写字母组成。
【输出】
最终方案数对1000000007取模的值。
【样例输入】
5
abcba
【样例输出】
4
【样例说明】
四个方案,分别是:
取[1,2,3],为abc
取[1,3,4],为acb
取[2,3,5],为bca
取[3,4,5],为cba
【样例输入】
5
dxddx
【样例输出】
0
【样例说明】
显然无论怎么取3个字母,都一定存在两个相同字母。

难度等级: 3
总通过次数: 8
总提交次数: 56
  • strings