首页 > 解决方案 > 请帮助理解功能

问题描述

我正在查看 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”,它确实如此,但我不完全理解为什么。

非常感谢!

标签: javascript

解决方案


它拆分s成一个单独的字符数组,然后循环遍历结果数组。对于每个元素(字符),它检查数组中该字符的第一个和最后一个实例是否在同一个位置。如果是这样,那么它必须是数组中该字符的唯一实例。

顺便说一下,解决方案可以简化如下:

const firstNotRepeatingChar = s => {
  for (let c of s) {
    if (s.indexOf(c) === s.lastIndexOf(c)) return c;
  }
  return "_";
};

推荐阅读