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