题目来源
1371. 每个元音包含偶数次的最长子字符串 - 力扣(LeetCode)
本题最简单的思路就是双循环暴力枚举所有子串,然后计算子串内各个元音的数目。
但是这种思路肯定会超时。
我们枚举子串的目的,是为了统计子串中各元音字符的数量,而实现该需求的更优思路是利用前缀和。
前缀和的应用场景有非常鲜明的特点,如求解连续范围内的状态,实际例子有:求解任意区间的和。
本题其实也可以当成前缀和问题来看,我们遍历输入串,每遍历一个字符,则对应位置 i 就有一个前缀状态 preSum[i],本题preSum[i] 表示 [0, i] 范围内各个元音字符的数量,具体表现为:
preSum[i] = {
‘a’:aCount,'e':eCount,
'i':iCount,
'o':oCount,
'u':uCount
}那么,如果我们要求解范围[i, j]子串的各个元音的数量,即可