【问题标题】:Create a function that takes a string and returns either true or false depending on whether or not the string has repeated characters创建一个接受字符串并根据字符串是否包含重复字符返回 true 或 false 的函数
【发布时间】:2019-12-05 00:56:21
【问题描述】:

var arr = [];
repeatcount = 0;

function isogram(str) {
  for (var i = 0; i < str.length; i++) {
    for (var g = 0; g < arr.length; g++) {
      if (str[i] != arr[g]) {
        arr.push(str[i]);
      }
    }
  }
  if (arr.length != str.length) {
    return false
  } else {
    return true
  }
}


document.write(isogram("jiang"));

console.log(arr);

我在使用console.log(arr)的时候发现arr是空的,不知道为什么。我使用的方法基本上是创建一个存储非重复字符的数组然后比较长度,如果长度不同则有重复字符。

【问题讨论】:

  • arr.length 最初是 0。所以你的内部循环永远不会运行
  • 这是我想到的问题,有什么办法可以解决吗?
  • @Jiangyuxin 使用str.length 而不是arr.length。但是,对于您正在查看的实际问题,有有效的解决方案stackoverflow.com/questions/33656708/…

标签: javascript


【解决方案1】:

由于开头的arr 长度等于0,因此永远不会触发内部循环。

g < arr.length // is always false

我建议你摆脱内部循环并使用一个简单的条件来代替 - 如果当前字母不在 arr 内 - 推它,如果有 - 不要。

var arr = [];
repeatcount = 0;

function isogram(str) {
  for (var i = 0; i < str.length; i++) {
    if (arr.indexOf(str[i]) === -1) {
       arr.push(str[i]);
    } else {
      return false;
    }
  }
  
  return arr.length === str.length;
}

console.log(isogram("jiang"));
console.log(isogram("jiiang"));

奖励:一条线解决方案:

const isogram = (str) => [...str].length === [...new Set(str)].length;

console.log(isogram("jiang"));
console.log(isogram("jiiang"));

【讨论】:

  • arr.indexOf(str[i]) === -1。 -1 是什么意思?对不起,如果问题很愚蠢,我刚开始学习js
  • 只要 if 条件为假,该函数也可以返回 false,否则返回 true。 ;-)
  • @JiangYuxin 如果数组中还没有指定元素,则其索引等于-1
猜你喜欢
  • 1970-01-01
  • 2021-11-29
  • 2021-02-16
  • 1970-01-01
  • 2016-11-20
  • 2023-04-07
  • 2022-11-15
  • 2020-10-06
  • 2019-06-06
相关资源
最近更新 更多