Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找第一个非重复字符javascript_Javascript_Arrays_String - Fatal编程技术网

查找第一个非重复字符javascript

查找第一个非重复字符javascript,javascript,arrays,string,Javascript,Arrays,String,我试图在一个网站上解决下面的问题,但他们一直说,当我达到某些测试时,有些事情是不对的 给定由小英文字母组成的字符串s,查找并返回其中非重复字符的第一个实例。如果没有此类字符,则返回“\u1” 我试过这个 function firstNotRepeatingCharacter(s) { let strArr = s.replace(" ", "").split(""), newArr = []; for (

我试图在一个网站上解决下面的问题,但他们一直说,当我达到某些测试时,有些事情是不对的

给定由小英文字母组成的字符串s,查找并返回其中非重复字符的第一个实例。如果没有此类字符,则返回“\u1”

我试过这个

function firstNotRepeatingCharacter(s) {
    let strArr = s.replace(" ", "").split(""),
        newArr = [];
    for (let i = 0; i < strArr.length; i++) {
        newArr = strArr.filter(lol => lol === strArr[i]);
        if (newArr.length === 1) {
            return newArr[0];  
        };
    };
    return "_";
};
console.log(firstNotRepeatingCharacter("abacabad"));
函数firstnotrepeating字符{
设strArr=s.replace(“,”).split(“”),
newArr=[];
for(设i=0;ilol===strArr[i]);
如果(newArr.length==1){
返回newArr[0];
};
};
返回“\”;
};
log(firstNotRepeatingCharacter(“abacabad”);
19次测试中有16次有效。为什么不全部

谢谢大家! 我找到了答案

函数firstnotrepeating字符{
设strArr=s.replace(“,”).split(“”);
对于(让strArr的str)
if(strArr.indexOf(str)=strArr.lastIndexOf(str))
返回str;
返回“\”;
};
log(firstNotRepeatingCharacter(“abacabad”);

另一种时间复杂度更好的方法:

函数firstnotrepeating字符{
const seenBefore=新集合();
让结果为=“_389;”;
for(设i=s.length;i--;){
常数char=s.charAt(i);
如果(seenBefore.has(char))继续;
参见前面的添加(字符);
结果=字符;
}
返回结果;
}

log(firstNotRepeatingCharacter(“abacabad”)是否需要检查空参数?不,我只是希望它可以工作,因为删除console.log会让我通过另外两个测试。可能您失败的测试有空格
aa
应该返回``(空格),对吗?空格是字符吗?或者,另一方面,除了空格之外,可能还有其他字符不符合检测为非重复字符的条件。e、 g.数字、标点符号或其他空白字符?@Wyck不,它们应该返回“i”、“i”、“b”,但这三个返回的是未定义的测试用例的输入是什么?我知道这是您自己的答案,但它没有回答您提出的问题,即:“……为什么不是全部?”为什么最初的代码只通过了19个测试中的16个,但很可能这19个测试都通过了?您需要
strArr
做什么?那
.replace()
?使用
Set()
只需检查每个不同的字符一次<如果(s.indexOf(char)==s.lastIndexOf(char))返回char,则(新集合的let char))的代码>为
@Wyck yes此解决方案通过了所有测试。@Thomas非常感谢我肯定会了解更多有关Set()的信息我刚刚检查了此解决方案,它只通过了19个测试中的11个