提问人:Vladyslav Akopov 提问时间:3/2/2023 最后编辑:Peter SeligerVladyslav Akopov 更新时间:7/28/2023 访问量:289
函数 isAlphabet 将接受字母,如果字母的顺序与字母表中的顺序匹配,则返回 true,否则为 false
function isAlphabet will take letters and return true if the order of the letters matches the order in the alphabet, otherwise false
问:
我需要实现这样的功能,如果字母的顺序与字母表中的顺序匹配,它将接受字母并返回,否则:isAlphabet
true
false
isAlphabet ('abc') === true
isAlphabet ('aBc') === true
isAlphabet ('abd') === false // - there is c after b
isAlphabet ('a') === true
isAlphabet ('') === false // - task not completed
isAlphabet ('abcdefghjiklmnopqrstuvwxyz') === false // - j goes after i
isAlphabet ('tuvwxyz') === true
isAlphabet ('XYZ') === true
isAlphabet ('mnoprqst') === false // - q goes before r
我的代码:
function isAlphabet(letters) {
// write code here
const char = letters.toLowerCase();
for (let i = 0; i < char.length; i++) {
if (char[i + 1] - char[i] !== 1) {
return false;
}
}
return true;
}
对于输入,该函数必须返回,但我上面的实现返回 。'abc'
true
false
你能帮我发现我的代码中的错误吗?
编辑
在根据一些建议更改代码后...
function isAlphabet(letters) {
// write code here
const ch = letters.toLowerCase();
for (let i = 0; i < ch.length; i++) {
if (ch[i + 1].charCodeAt() - ch[i].charCodeAt() !== 1) {
return false;
}
}
return true;
}
...该函数仍然出错。
答:
0赞
Peter Seliger
3/3/2023
#1
从上面的评论中......
“提示......'
a'.charCodeAt(0
) - 'b'.charCodeAt(0) 等于 -1
,而 'a'.charCodeAt(0) - 'c'.charCodeAt(0
) 等于-2
,'aBc'.toLowerCase().split(
'') 的结果是 ['a', 'b', 'c']。
——彼得·塞利格
“@PeterSeliger我遇到的错误不止一个。这是一个例子“——弗拉迪斯拉夫·阿科波夫
“@VladyslavAkopov......该提示已经提供了实现字母字符序列不区分大小写检测解决方案所需的一切。——彼得·塞利格
下一个(和注释的)代码示例确实证明了上述声明。
function isStrictAlphabeticalAscendingSequence(value) {
// always ensure a string value.
value = String(value);
return (
// ensure a non-empty string value ...
value.length >= 1 &&
// ... and ...
value
// ... a case insensitive ...
.toLowerCase()
// ... character sequence (array) ...
.split('')
// ... where ...
// (the usage of `every` guarantees an early exit)
.every((char, idx, arr) => {
let result = true;
if (idx < arr.length - 1) {
result =
// ... each next character is a direct follower
// of its previous character in a strict
// alphabetic ascending meaning.
(arr[idx + 1].charCodeAt(0) - char.charCodeAt(0) === 1);
}
return result;
})
);
}
[
'abc',
'aBc',
'abd',
'a',
'',
'abcdefghjiklmnopqrstuvwxyz',
'tuvwxyz',
'XYZ',
'mnoprqst',
]
.forEach(value =>
console
.log(`'${ value }' => ${ isStrictAlphabeticalAscendingSequence(value) }`)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
评论
0赞
Vladyslav Akopov
3/3/2023
function isAlphabet(letters) { // write code here const ch = letters.toLowerCase(); for (let i = 0; i < ch.length; i++) { if (ch[i + 1].charCodeAt() - ch[i].charCodeAt() !== 1) { return false; } } return true; }
仍然是一个错误
0赞
Peter Seliger
3/3/2023
在哪些测试用例(OP 提供的字符串以及 OP 的期望)下,OP 最新提供的实现会失败?OP 认为(或每个)失败的根源是什么?
0赞
Peter Seliger
3/3/2023
@VladyslavAkopov......还鼓励 OP 根据 OP 最后提供的实现(上面的两个注释)编辑原始问题。
0赞
Peter Seliger
3/15/2023
@VladyslavAkopov......关于到目前为止唯一提供的答案/解决方案,还有什么问题吗?
0赞
Vladyslav Akopov
3/17/2023
不,谢谢。我用我的方式解决了问题。
0赞
Vitalii
7/28/2023
#2
function isAlphabet(letters) {
const lowercaseLetters = letters.toLowerCase();
// If the string has less than two characters, the order cannot
be determined
// But if the input is a single character, it can be considered
an alphabet
if (lowercaseLetters.length < 2) {
return lowercaseLetters >= 'a' && lowercaseLetters <= 'z';
}
for (let i = 1; i < lowercaseLetters.length; i++) {
// Compare the ASCII codes of the current letter and the
previous one
if (lowercaseLetters.charCodeAt(i) <
lowercaseLetters.charCodeAt(i - 1)) {
return false;
}
// Check if the current letter is the same as the previous one
// If it is, it's not an alphabet sequence
if (lowercaseLetters[i] === lowercaseLetters[i - 1]) {
return false;
}
// Check if there are missing characters in the sequence
if (lowercaseLetters.charCodeAt(i) -
lowercaseLetters.charCodeAt(i- 1) > 1) {
return false;
}
}
返回 true; }
评论
!==
!=
1
'q'
i
'z'
i + 1
'q'
'z'
1
!==
!=