javascript - 子字符串索引问题
问题描述
此卡塔的说明:
在这个 Kata 中,我们将检查一个字符串是否包含出现在英文字母表中的连续字母,以及每个字母是否只出现一次。
似乎我的代码在每个函数调用上对字符串进行了不同的索引。例如,在第一个测试“abcd”中,起始索引显示为 0,这是正确的,而在第二个示例“himjlk”中,
var subString = alphabet.substring(startIndex, length);
返回“g”,而不是“h”
本节疑难解答
var length = orderedString.length;
//startChar for string comparison
var startChar = orderedString.charAt(0);
//find index in aphabet of first character in orderedString.
var startIndex = alphabet.indexOf(startChar);
//create substring of alphabet with start index of orderedString and //orderedString.length
var subString = alphabet.substring(startIndex, length);
function solve(s) {
//alphabet string to check against
const alphabet = `abcdefghijklmnopqrstuvwxyz`;
//check s against alphabet
//empty array to order input string
var ordered = [];
//iterate through alphabet, checking against s
//and reorder input string to be alphabetized
for (var z in alphabet) {
var charToCheck = alphabet[z];
for (var i in s) {
if (charToCheck === s[i]) {
ordered.push(s[i]);
}
//break out of loop if lengths are the same
if (ordered.length === s.length) {
break;
}
}
if (ordered.length === s.length) {
break;
}
}
//join array back into string
var orderedString = ordered.join(``);
//length for future alphabet substring for comparison
var length = orderedString.length;
//startChar for string comparison
var startChar = orderedString.charAt(0);
//find index in aphabet of first character in orderedString.
var startIndex = alphabet.indexOf(startChar);
//create substring of alphabet with start index of orderedString and orderedString.length
var subString = alphabet.substring(startIndex, length);
//return if the two are a match
return subString == orderedString ? true : false;
}
console.log(solve("abdc")); //expected `true`
console.log(solve("himjlk")); // expected `true`
console.log(solve("abdc"));
应该提供子字符串“abcd”并返回true,它确实如此。
console.log(solve("himjlk"));
应该把 "hijklm" 和 return 放在一起true
,而是g
根据字母表的索引 6 给我,不知道为什么这样做,应该是索引 7 "h" 根据这个错误返回 false。
解决方案
问题是您使用的是substring()而不是substr()。虽然这听起来很相似,但还是有区别的。
使用 substring 时,第二个参数不会像您预期的那样确定长度。它实际上是停止的索引。您的函数使用字符串 abcd 按预期工作纯属巧合,因为在这种情况下,索引 0 和结束索引的长度相同。
function solve(s){
const alphabet = `abcdefghijklmnopqrstuvwxyz`;
var ordered = [];
for(var z in alphabet){
var charToCheck = alphabet[z];
for(var i in s){
if(charToCheck === s[i]){
ordered.push(s[i]);
}
if(ordered.length === s.length){ break; }
}
if(ordered.length === s.length){ break; }
}
var orderedString = ordered.join(``);
var length = orderedString.length;
var startChar = orderedString.charAt(0);
var startIndex = alphabet.indexOf(startChar);
var subString = alphabet.substr(startIndex, length);
return subString == orderedString ? true: false;
}
console.log(solve("himjlk"));
推荐阅读
- linker - 构建用于 Nordic SDK 程序的静态 rust 库时的“memset”的多重定义
- docker - 如果在 Docker 下运行的 .NET Core 单元测试的代码覆盖率低于 90%,则破坏 TeamCity 中的构建
- ios - 在目标 c 中使用 jsonModel 映射时将默认值设置为空字段
- android - 为特定活动实现广播接收器
- mongodb - MongoDB:如何只更新文档中的一个元素?
- maven - spotify dockerfile-maven Dockerfile
- php - 如何从 url 上传文件?
- mysql - 如何通过几个条件计算测距?
- iis - IIS setting SSL to Require and Accept problem
- python - In CSV files, problem with special character (") in a field