假设我们有一个字符串s(小写),我们必须找到最长的子字符串的长度,其中每个元音出现偶数次。
因此,如果输入类似于s =“ anewcoffeepot”,则输出将为10,因为子字符串“ wcoffeepot”具有两个元音“ o”和“ e”,它们都出现两次。
为了解决这个问题,我们将遵循以下步骤-
元音:=将元音和数值分配为{a:0,e:1,i:2,o:3,u:4}的映射
prefix:=一个空的映射,并在其中插入键值对(0,-1)
掩码:= 0,n:= s的大小,res:= 0
对于0到n范围内的i,执行
res:= res的最大值和(i-prefix [mask])
前缀[mask]:= i
mask:= mask XOR(2 ^元音[s [i]])
如果s [i]是元音,则
如果mask不是前缀,则
除此以外,
返回资源
让我们看下面的实现以更好地理解-
class Solution: def solve(self, s): vowels = {"a": 0, "e": 1, "i": 2, "o": 3, "u": 4} prefix = {0: −1} mask = 0 n = len(s) res = 0 for i in range(n): if s[i] in vowels: mask ^= 1 << vowels[s[i]] if mask not in prefix: prefix[mask] = i else: res = max(res, i − prefix[mask]) return res ob = Solution() s = "anewcoffeepot" print(ob.solve(s))
"anewcoffeepot"输出结果
10