我在浏览 leetcode 时发现了一个我无法完全推理的解决方案的问题。
问题描述:“给定一个由小写英文字母组成的字符串s,找到并返回其中第一个非重复字符,如果不存在则返回'_'。”
解决方案:
/*test word*/ var word = "abcdefghijklmnopqrstuvwxyziflskecznslkjfabe";
/*Test #2 var word = "abacabad"; */
firstNotRepeatingChar = s => {
var arr = s.split("");
for(var i = 0; i < arr.length; i++){
if(arr.indexOf(arr[i]) == arr.lastIndexOf(arr[i]))
return arr[i];
}
return "_"
};
firstNotRepeatingChar(word);
我想知道是否有人可以解释这是如何工作的以及为什么它会出现“d”的解决方案。测试 # 2 应该打印“c”,确实如此,但我不完全理解为什么。
非常感谢!
最佳答案
它将 s
拆分为一个由单个字符组成的数组,然后循环遍历生成的数组。对于每个元素(字符),它检查数组中该字符的第一个和最后一个实例是否在同一位置。如果是,那么它必须是数组中该字符的唯一实例。
顺便说一句,解决方案可以简化如下:
const firstNotRepeatingChar = s => {
for (let c of s) {
if (s.indexOf(c) === s.lastIndexOf(c)) return c;
}
return "_";
};
关于javascript - 请帮助理解功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58047637/