在C ++中找到偶数个包含元音的最长子串
假设我们有字符串s,我们必须找到包含每个元音的偶数次的最长子字符串的大小。也就是说,“a”,“e”,“i”,“o”和“u”必须出现偶数次。因此,如果字符串类似于“helloworld”,则输出为8。
为了解决这个问题,我们将遵循以下步骤-
ret:=0,定义两个映射m和cnt,设置m[“00000”]:=-1
将元音存储到元音数组中
对于范围从0到s的i
x:=s[i],好的:=false
将cnt[x]加1,设置temp:=空字符串
对于0到4范围内的k:temp:=temp+'0'+cnt[vowels[k]]mod2
如果m具有温度,则ret:=ret和i–m[temp]的最大值,否则m[temp]:=i
返回ret
范例(C++)
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int findTheLongestSubstring(string s) { int ret = 0; map <string, int> m; map <char, int> cnt; m["00000"] = -1; char vowels[5] = {'a', 'e', 'i', 'o', 'u'}; for(int i = 0; i < s.size(); i++){ char x = s[i]; bool ok = false; cnt[x]++; string temp = ""; for(int k = 0; k < 5; k++){ temp+= ('0' + (cnt[vowels[k]] % 2)); } if(m.count(temp)){ ret = max(ret, i - m[temp]); } else{ m[temp] = i; } } return ret; } }; main(){ Solution ob; cout << (ob.findTheLongestSubstring("helloworld")); }
输入项
“helloworld”
输出结果
8