英文:
Why the output is not correct if the same characters are not adjacent?
问题
一个"异位同字母词"是指一个单词中没有重复的字母,无论是连续的还是非连续的。实现一个函数来确定一个只包含字母的字符串是否是一个"异位同字母词"。假设空字符串也是一个"异位同字母词"。忽略字母的大小写。
function isIsogram(str){
let NewStr = str.toLowerCase();
for ( let i = 0; i < NewStr.length; i++){
for ( let j = i + 1; j < NewStr.length; j++) {
if ( NewStr[i] === NewStr[j]) {
return false }
else {
return true}
}
}
}
英文:
An isogram is a word that has no repeating letters, consecutive or non-consecutive. Implement a function that determines whether a string that contains only letters is an isogram. Assume the empty string is an isogram. Ignore letter case.
function isIsogram(str){
let NewStr = str.toLowerCase();
for ( let i = 0; i < NewStr.length; i++){
for ( let j = i + 1; j < NewStr.length; j++) {
if ( NewStr[i] === NewStr[j]) {
return false }
else {
return true}
}
}
}
答案1
得分: 2
这段代码会在找到两个不相等的字母时返回true
:
if (NewStr[i] === NewStr[j]) {
return false;
} else {
return true;
}
你应该在条件满足时返回false
。如果条件不满足,继续循环,最后返回true
:
function isIsogram(str) {
let NewStr = str.toLowerCase();
for (let i = 0; i < NewStr.length; i++) {
for (let j = i + 1; j < NewStr.length; j++) {
if (NewStr[i] === NewStr[j]) {
return false;
}
}
}
return true;
}
你也可以使用Set来执行相同的检查。如果Set中的字母数等于原始字符串的字母数,那么所有字符都是唯一的:
function isIsogram(str) {
return new Set(str.toLowerCase()).size === str.length;
}
希望这有帮助。
英文:
This code will return true
as soon as it finds two letters that are not equal:
if ( NewStr[i] === NewStr[j]) {
return false }
else {
return true}
What you should do is return false
only if the condition passes. If not continue the loop, and return true
at the end:
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
function isIsogram(str) {
let NewStr = str.toLowerCase();
for (let i = 0; i < NewStr.length; i++) {
for (let j = i + 1; j < NewStr.length; j++) {
if (NewStr[i] === NewStr[j]) {
return false
}
}
}
return true;
}
console.log(isIsogram('cdba')); // true
console.log(isIsogram('aa')); // false
console.log(isIsogram('efgaba')); // false
<!-- end snippet -->
You can also do the same check using a Set. If the number of letters in the Set is equal to the number of letters in the original string, all characters are unique.
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
function isIsogram(str) {
return new Set(str.toLowerCase()).size === str.length;
}
console.log(isIsogram('cdba')); // true
console.log(isIsogram('aa')); // false
console.log(isIsogram('efgaba')); // false
<!-- end snippet -->
答案2
得分: 2
当条件为真时,返回 false
,否则返回 true
。这意味着函数将在第一次结束,无论 NewStr[0] === NewStr[0]
是否为真。
英文:
look what did your code do:
if ( NewStr[i] === NewStr[j]) {
return false }
else {
return true}}
When the condition is true, return false
, otherwise return true
.
It means that function will be finished at the first time whether NewStr[0] === NewStr[0]
is true or not
答案3
得分: 1
-
存储已经看到的字母。如果之前见过该字母,则返回
false
。 -
使用对象来存储已经看到的字母,因为如果字母是未见过的,属性会返回
false
。 -
只使用一个循环。
结论:
function isIso(string) {
var seen = {},
i;
string = string.toLowerCase();
for (i = 0; i < string.length; i++) {
if (seen[string[i]]) return false;
seen[string[i]] = true;
}
return true;
}
console.log(isIso('')); // true
console.log(isIso('abc')); // true
console.log(isIso('abbc')); // false
console.log(isIso('abca')); // false
英文:
What you can do:
-
Store a seen letter. If you have seen a letter before return
false
. -
Use an object for for storing a seel letter, because if unseen, the property returns
false
-
Use only a single loop.
Conclusion:
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
function isIso(string) {
var seen = {},
i;
string = string.toLowerCase();
for (i = 0; i < string.length; i++) {
if (seen[string[i]]) return false;
seen[string[i]] = true;
}
return true;
}
console.log(isIso('')); // true
console.log(isIso('abc')); // true
console.log(isIso('abbc')); // false
console.log(isIso('abca')); // false
<!-- end snippet -->
答案4
得分: 1
现代 JavaScript 代码如下:
function isIsogram(str){
return str.length === new Set(str.toLowerCase().split('')).size;
}
console.log(isIsogram('abcd'))
console.log(isIsogram('abcb'))
请注意,上述代码是 JavaScript 代码示例,用于检查一个字符串是否为异位词(isIsogram)。
英文:
Modern javascript code is simple as
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
function isIsogram(str){
return str.length === new Set(str.toLowerCase().split('')).size;
}
console.log(isIsogram('abcd'))
console.log(isIsogram('abcb'))
<!-- end snippet -->
答案5
得分: 0
function isIsogram(str){
for(let i=0; i<str.length; i++){
if(str[i] === str[i+1]){
return false
}
}
return true
}
英文:
function isIsogram(str){
for(let i=0; i<str.length; i++){
if(str[i] === str[i+1]){
return false
}
}
return true
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论