gpt4 book ai didi

javascript - 查找 Javascript 数组中最长的单词

转载 作者:行者123 更新时间:2023-11-28 14:15:17 25 4
gpt4 key购买 nike

所以我正在解决这个 codility 编码挑战,但我无法让代码适用于所有输入,尤其是大输入。其规则是 here

总而言之,我需要测试字符串中的每个单词:仅限字母数字字符、偶数个字母和奇数个数字。

对于示例输入 - “test 5 a0A pass007 ?xy1”,此解决方案有效地忽略“test”(它具有偶数位,0 位)和“?xy1”(特殊字符,?)。从剩下的选项中,它选择 pass007 作为最长的单词并返回 7(单词长度)。

我首先将字符串拆分为单独的单词,然后生成 if 语句来检查新数组中的每个单词是否满足要求,isAlpha、isAlphaEven(偶数字母余数 0)、isNumeric(奇数余数 1) )。

知道我做错了什么吗?非常感谢! :)

 // you can write to stdout for debugging purposes, 
// e.g. console.log('this is a debug message');

function solution(S) {
// write your code in JavaScript (Node.js 8.9.4)
// you can write to stdout for debugging purposes,
// e.g. console.log('this is a debug message');
// write your code in JavaScript (Node.js 8.9.4)
var words = S.split(" ");
var isAlpha = /^[0-9a-zA-z]*$/;
var isAlphaEven = /^[a-zA-Z]/;
var isNumeric = /^[0-9]/;
var maxLength = -1;

for(var i = 0; i <= words.length - 1; i++) {
if(words[i].match(isAlpha)
&& words[i].replace(isAlphaEven, '').length % 2 == 0
&& words[i].replace(isNumeric, '').length % 2 == 1
|| words[i].match(isNumeric)
) {
maxLength = Math.max(maxLength, words[i].length);
//console.log(words[i], maxLength);
}
}

return maxLength;
}

最佳答案

一个问题是模式

var isAlphaEven = /^[a-zA-Z]/;
var isNumeric = /^[0-9]/;

只能匹配字符串开头的字符:^ 锚定到开头。它也不是全局匹配,因此它只会替换一个字符。另一个问题是您用空字符串替换匹配项,而不是测试匹配项的数量。要测试匹配的数量,请使用 .match 和全局标志,并检查结果数组的长度(如果没有匹配则为 null):

function solution(S) {
// write your code in JavaScript (Node.js 8.9.4)
// you can write to stdout for debugging purposes,
// e.g. console.log('this is a debug message');
// write your code in JavaScript (Node.js 8.9.4)
var words = S.split(" ");
var allAlphaNumeric = /^[\da-z]*$/i;
var alpha = /[a-z]/gi;
var numeric = /\d/g;
var maxLength = -1;

for (var i = 0; i <= words.length - 1; i++) {
if (words[i].match(allAlphaNumeric) &&
(words[i].match(alpha) || []).length % 2 == 0 &&
(words[i].match(numeric) || []).length % 2 == 1
) {
maxLength = Math.max(maxLength, words[i].length);
}
}

return maxLength;
}

console.log(solution("test 5 a0A pass007 ?xy1"));

请注意,您可以使用不区分大小写的标志来代替重复 a-zA-Z,并且可以使用 \d 代替 [0- 9]如果你愿意的话。

虽然您可以使用 .replace 来计算匹配的数量,但它会很复杂:您必须替换所有匹配的内容空字符串,这会使代码的意图有些困惑。

关于javascript - 查找 Javascript 数组中最长的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57766003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com