题目链接:
题目大意
给定26个小写字母的权值,一共26个整数(有正有负)。
给定一个小写字母组成的字符串(长度10^5),求有多少长度大于1的子串满足:
1)首尾字符相同。
2)除了首尾字符外,其他字符的权值和为0。
题目分析
使用STL Map。开26个Map,给每个字母开一个。
先求出权值的前缀和 Sum[] 。
然后1到l枚举每一位字符,如果是a,那么 Ans += Map[a][Sum[i - 1]];
然后 ++Map[a][Sum[i]];
这个原理是十分简单的,但是我就是这么弱,以至于比赛的时候想不到,然后用了一种复杂的方法,最后WA了= =
时间复杂度 O(n log n) 。
代码
#include #include #include #include #include #include #include