尝试编写一个程序来检查字符串是否是带有javascript的isogram

时间:2017-03-05 22:00:33

标签: javascript

我尝试了下面的代码,通过了一些测试而没有通过其他代码。

 function isIsogram(str) {
    //...
    var strArr = str;
    for (var i = 0; i < strArr.length; i++) {
        for (var j = 0; j < strArr.length; i++) {
            if (strArr[i] == strArr[j]) {
                return true
            } else {
                return false;
            }
        }
    }
}
isIsogram("isaac");

7 个答案:

答案 0 :(得分:3)

永远不要忘记正则表达式有多强大!

function isIsogram(str){ 
  return !/(\w).*\1/i.test(str)
}

答案 1 :(得分:1)

您必须在代码中排除当前字符,请查看

function isIsogram(str) {
//...
var strArr = str;
for (var i = 0; i < strArr.length; i++) {
    for (var j = 0; j < strArr.length; j++) {
        if(i!=j){
          if (strArr[i] == strArr[j]) {
              return false
          }
        }
    }
}
return true;
}

答案 2 :(得分:0)

在第二个循环中,您是i递增,而不是j。此函数也应该在匹配项上返回false,并且应该避免自己检查strArr[i] ...

答案 3 :(得分:0)

您的解决方案:

function isIsogram(str) {

 var word = str.split(''); //split the word into an array
 for (var i = 0, j = 1; i < word.length - 1; i++, j++) {
   if (word[i] == word[j]){//check if the character right after the current is the same
                              //as the current character
     console.log('Not');
     return false;      //if it is - it's not an isogram
   }
 }
 console.log('Isogram');
 return true;   //loop has passed - it's an isogram
}

isIsogram("isaac");
isIsogram("isac");

更简单的方法:

function isIsogram(word){
   word = word.split('');
   word.every((v,i) => v != word[i-1]) ? console.log('Isogram') : console.log('Not');
}

isIsogram('isaac');
isIsogram('isac');

答案 4 :(得分:0)

b

答案 5 :(得分:0)

尝试一下:

function isogram(wrd) {
    if (typeof wrd !== "string" || wrd.length === 0) return false;

    wrd = wrd.trim().toLowerCase();

    for (var i = 0; i < wrd.length; i++) {
            if (wrd.lastIndexOf(wrd[i]) > i) return false;
    }
    return true;
}

答案 6 :(得分:0)

function Isogram(str){
    let myStr = str.toLowerCase();
    let mySet = new Set();

    for(let i = 0; i < myStr.length; i++){
        if(mySet.has(myStr[i])){
            return false;
            break;
        }
        else{
            mySet.add(myStr[i]);
        }
    }
    return true;
}

在这里,我使用Set。逻辑是-对于字符串中的每个字符,如果Set中包含该字符,则该字符串将不是等轴线图。

我检查字符是否在集合中,如果不存在,则将新字符添加到集合中。当角色在以后的迭代中重复出现时,我将在Set中使用它,并与Set中的值进行比较,并在找到副本时我将返回“ false”