题目大意:求给定字符串所有字串的F(S)之和,规定F(S)表示为字符串S中恰好出现一次的字符的个数
首先,我们先考虑暴力枚举的做法
先枚举区间的左端点,然后设置一个num数组,用来记录某个字符出现的次数。和sum,用来标记仅仅出现一次的字符的个数。(这里也可以使用set来判断某个字符有没有出现过,但不要使用set,而是unordered_set,因为我们不需要用到set的排序功能,只需要用到set的去重功能,而set的排序是需要O(logN)的时间的)
但这样做肯定会超时的,我们考虑能不能进行优化
根据题目范围,我们需要用一个O(NlogN),或者O(N)的算法
在上面的暴力算法中,我们枚举的是区间,然后在区间中找到仅出现一次的字符,而枚举区间是需要两重for循环的。那么,我们是不是可以直接枚举所有字符,然后找到这个字符仅仅出现一次的区间呢?
答案是可以的!我们只需要找到该字符Pos左边第一次出现的位置Left,和右边第一次出现的位置Right,那么该字符仅出现一次的区间个数为SUM=(Right - Pos)* (Pos - Left)
我