问题

只是想知道它是否可以在字符串上使用for循环.不确定是否可能有奇怪的结果或不好的做法,但我的解决方案至少在这个例子中有效.

编码实践问题.此外,如果有人有办法改进我的解决方案,我可以建议.

 function firstNonRepeatingLetter(str) {
  const lowerStr = str.toLowerCase();

  for (let char in lowerStr) {
    if (lowerStr.lastIndexOf(lowerStr[char]) === parseInt(char) && 
    lowerStr.indexOf(lowerStr[char]) === parseInt(char)) {
      return str[char];
    }
  }

  return "";
}
 

写一个名为 first_non_repeating_letter 的函数,它需要一个 string 输入,并返回字符串中没有重复的第一个字符。

例如:

 firstNonRepeatingLetter('a') => 'a'
firstNonRepeatingLetter('stress') => 't'
firstNonRepeatingLetter('sTreSS') => 'T'
 

  最佳答案

当您的代码工作时,我建议采用索引来迭代字符串的字符.

但是您的方法通过使用indexOflastIndexOf将字符串重叠到很大程度.这可以通过使用循环存储最后找到的字符索引来更改.

在另一个循环中,将实际索引与相同字符的存储索引进行比较,并在相等的情况下返回。

 function firstNonRepeatingLetter(str) {
    var lowerStr = str.toLowerCase(),
        hash = {},
        i;

    for (i = 0; i < lowerStr.length; i++)
        hash[lowerStr[i]] = i;

    for (i = 0; i < lowerStr.length; i++)
        if (hash[lowerStr[i]] === i)
            return str[i];

    return "";
}

console.log(firstNonRepeatingLetter('a'));      // a
console.log(firstNonRepeatingLetter('stress')); // t
console.log(firstNonRepeatingLetter('sTreSS')); // T 

  相同标签的其他问题

javascriptfor-loopindexoffor-in-looplastindexof