我尝试了下面的代码,通过了一些测试而没有通过其他代码。
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");
答案 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”