【发布时间】:2017-11-22 11:03:19
【问题描述】:
是的,我正在经历一个代码战争挑战,其目的是返回最长元音子串的长度,因为在“codewarriors”中将是“io”,所以答案是 2。我解决的方式它是通过用空格替换非元音,将剩下的元音分成一个数组,然后循环这个数组并将第一个子字符串推入另一个数组,然后我设置另一个 for 循环,这样我就可以循环第一个数组使用第二个数组检查长度,并在必要时替换为最长的。
这是我遇到麻烦的地方,因为我正在推送第一个值(与其他值进行比较的值),但如果在第二个循环中需要替换它,我只是替换不推送的值,所以如果第一个值是最长的数组将是一个对象,如果需要在第二个循环中替换它,它将被替换但它会变成一个字符串,这意味着给出长度的结束返回语句将需要更改在最长.length 和最长 [0].length 之间,我通过在末尾添加条件检查 typeof 来解决它,但我想知道是否有另一种解决方法?
我是初学者,如果上述内容有点混乱,请原谅我,非常欢迎任何关于其他解决挑战的方法的提示。
这是行不通的代码 -
function longestVowel(str) {
var seperateVowels = str.replace(/[bcdfghjklmnpqrstvwxyz]/ig, ' ');
var split = seperateVowels.split(" ");
var longest = [];
for(var i = 0; i < split.length; i++) {
if(longest.length === 0 && split[i] != "") {
longest = split[i];
} for(var j = 0; j < longest.length; j++) {
if(split[i].length > longest[j].length) {
longest = split[i];
}
}
}
return longest.length;
}
这是我的工作 -
function longestVowel(str) {
var seperateVowels = str.replace(/[bcdfghjklmnpqrstvwxyz]/ig, ' ');
var split = seperateVowels.split(" ");
var longest = [];
for(var i = 0; i < split.length; i++) {
if(longest.length === 0 && split[i] != "") {
longest.push(split[i]);
} for(var j = 0; j < longest.length; j++) {
if(split[i].length > longest[j].length) {
longest = split[i];
}
}
}
if(typeof longest == "object") {
return longest[0].length;
} else {
return longest.length;
}
}
longestVowel("suoidea");
【问题讨论】:
-
@Vasan:你忘了说你需要跟踪你在遍历过程中看到的最高计数器值。
-
如果你想要的只是长度,为什么不在第一个位置开始计数器并遍历字符串,如果看到非元音则重置计数器?在重置之前,如果您的当前计数器值大于当前最大值,请将计数器存储在
max变量中。谢谢@MrSmith42 -
非常有帮助,感谢 Vasan,这是一种更好的做事方式!
标签: javascript algorithm