在这个码战挑战上工作。
重新排序字符串的字符,使它们以"case-insensitively-alphabetical-order-of-appearance“顺序连接到新字符串中。空格和标点符号应该简单地移除! 输入仅限于不包含数字和只包含英文字母的单词。 示例: 字母顺序(“圣经”) // "BbeehHilloTy“
我一开始是:
function alphabetized(s) {
s = s.replace(/\s/g, "").toLowerCase();
return s.split("").sort().join("");
}
console.log(alphabetized("The Holy Bible"));
当然,我们希望返回BbeehHilloTy,保持原始字符的大写。
坦率地说,我不明白为什么期望的结果应该是BbeehHilloTy。
如果我们没有根据ASCII字符代码值进行排序,那么是什么决定了大写字母是否应该出现在新字符串的小写字母前面?
发布于 2019-06-07 18:11:51
下面是一个方法,通过比较字符串中的字符索引(如果它们相等的话)来创建一个稳定的排序:
function alphabetized(s){
s = s.replace(/\s+|\W+|\d+|[_]+/g, "");
return s.split('')
.map(function(x, i){ return [x, i]; })
.sort(function([a, i], [b, j]){
a = a.toLowerCase();
b = b.toLowerCase();
if (a == b)
return i - j;
else if (a < b)
return -1;
else
return 1;
})
.map(function([x, i]){ return x; })
.join('');
}
console.log(alphabetized("The Holy Bible"));
发布于 2019-06-07 18:00:03
根据@code 3483203的代码:
function alphabetized(s) {
s = s.replace(/\s+|\W+|\d+|[_]+/g, "");
return s.split("").sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).join("");
}
console.log(alphabetized("The Holy Bible"));
所以关键是在这里使用localCompare()。
编辑:实际上,这个解决方案并不适用于Codewar上的所有测试。
https://stackoverflow.com/questions/56499115
复制相似问题