最近我参加了一次面试,被问到了多个问题,其中一个问题是这个,我在回答时遇到了一些困难。
给定一个字符串,找到出现的元音字母"a,e,i,o,u"的最长连续子串。 元音字母的子字符串不必是连续的,并且可以重复。
目标是找到每个元音字母的最大出现次数并将它们连接起来,但必须按照"a","e","i","o","u"的顺序进行。
编辑:此外,每个单独的元音字符也必须被链接。 在下面的示例中,有"aaa"和"aa",因为3更长,所以我们的结果必须包含更长的链。
例如: 输入:"aaagtaayuhiejjhgiiiouaae" 输出:aaaeiiiou
我尝试过的代码如下:
编辑:根据解决方案,我写了下面的代码,但是我仍然遇到了字符串“aeiouaaaeeeiiiooouuu”等字符串的问题。 正确的结果为15,但我得到的是5。
var findLongestVowels = function(s){
var count = 1;
var i = 0;
var j = 0;
var vowels = ['a','e','i','o','u'];
var total = 0;
var array = [];
while (i < s.length){
if (s.charAt(i) == vowels[j] && s.charAt(i) == s.charAt(i+1) ){
count++;
}
else if (s.charAt(i) == vowels[j] && s.charAt(i) != s.charAt(i+1)){
if (j === 0 && !array[vowels[j]]){
array[vowels[j]] = count;
}
else if (j === 0 && array[vowels[j]]){
array[vowels[j]] = Math.max(array[vowels[j]],count);
}
else if (j !== 0 && !array[vowels[j]] && array[vowels[j-1]]){
array[vowels[j]] = array[vowels[j-1]] + count;
}
else if (j !== 0 && array[vowels[j]] && array[vowels[j-1]]){
array[vowels[j]] = Math.max(array[vowels[j]],array[vowels[j-1]] + count);
}
count = 1;
}
else if (s.charAt(i) == vowels[j+1] && array[vowels[j]]){
j++;
i--;
}
i++;
}
console.log(array);
console.log('Answer: ' + array[vowels[j]]);
}
findLongestVowels("eeeeebbbagtaagaaajaaaaattyuhiejjhgiiiouaae");
我至少走在正确的方向上吗?
提前感谢。
console.log('aaagtaayuhiejjhgiiiouaae'.match(/[aeiou]+/gi).reduce((a, b) => a.length > b.length ? a : b));
- Tushar