繁体   English   中英

用Javascript检查一个字符串是否是一个等值线 - 逻辑审查

[英]Check whether a string is an isogram with Javascript - logic review

我尝试解决字符串是否为等值线图如下:
我不知道为什么我的代码不起作用。 请有人能帮忙解释一下原因吗?
等值线图没有连续或不连续的重复字母。
我曾尝试: 1- 将字符串转换为小写并使其成为数组。 2- 如果字符串为空,则创建一个 if 检查以返回 true。 3- 通过数组运行 for 循环并比较每个字母的 firstIndex 和 lastIndex。 如果第一个实例和最后一个实例不相同,则字符串不能是等值线图,因此返回 false。??

    function isIsogram(str){
      str = str.toLowerCase();
      let text = str.split("");
      if (text.length === 0) { 
        return true;
      }
      for (let i = 0; i < text.length; i++) {
        if ( text.indexOf(text[i]) !== text.lastIndexOf(text[i]) ){
          return false;
        } else {
          return true;
        }
      } 
    }

一个简单的更改应该可以解决问题。 您现有的函数只考虑第一个字符。 然后这将跳过字符串中的任何重复字符,例如,它为 'abb' 返回 true,这当然是不正确的。

最好继续到循环结束,只有在我们确定没有重复字符时才返回 true。

 function isIsogram(str){ str = str.toLowerCase(); let text = str.split(""); if (text.length === 0) { return true; } for (let i = 0; i < text.length; i++) { if (text.indexOf(text[i]) !== text.lastIndexOf(text[i]) ){ return false; } } return true; } const testInputs = ['abb','aab','aba','abc','abcdz']; testInputs.forEach(input => console.log(`isIsogram(${input}): ${isIsogram(input)}`));

这是另一个实现,使用Set()来计算唯一字符。 如果字符串没有重复字符,则设置大小给出的唯一字符数应与输入字符串长度相同。

 function isIsogram(str){ return new Set(str).size === str.length; } const testInputs = ['abb','aab','aba','abc', 'abcdz']; testInputs.forEach(input => console.log(`isIsogram(${input}): ${isIsogram(input)}`));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM