LeetCode 题解系列(1371):每个元音包含偶数次的最长子字符串
题目描述:
给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,’e’,’i’,’o’,’u’ ,在子字符串中都恰好出现了偶数次。
示例 1:
输入:s = “eleetminicoworoep”
输出:13
解释:最长子字符串是 “leetminicowor” ,它包含 e,i,o 各 2 个,以及 0 个 a,u 。
示例 2:
输入:s = “leetcodeisgreat”
输出:5
解释:最长子字符串是 “leetc” ,其中包含 2 个 e 。
示例 3:
输入:s = “bcbcbc”
输出:6
解释:这个示例中,字符串 “bcbcbc” 本身就是最长的,因为所有的元音 a,e,i,o,u 都出现了 0 次。
解法一: 前缀和
- 5 个字母的出现奇偶次数可以用一个长度为 5 的二进制数字来表示。
- 5 个字母所有出现的情况可以用一个 32 长度的数组来表示。代表的就是当前数字上次出现的位置,初始都是-1。
- 遍历每个字符,将对应位置进行异或,代表改变当前为出现的奇偶次数,如果这个数字对应数组之前出现过,则证明子串[0,i]与字串[0,j]对应的状态数字相同,那么[i+1..j]的状态一定是 0,代表偶数出现的都抵消了。
- 每次出现偶数次,都进行更新当前代表的长度差,统计最大长度差。
时间复杂度: O(N); 辅助空间复杂度: O(N)
1 |
|
LeetCode 题解系列(1371):每个元音包含偶数次的最长子字符串
http://example.com/2020/07/11/D-DataStructureAndAlgorithm/D-LeetCode/1371-FindTheLongestSubstring/