编写一个将句子作为输入并输出排序的句子的函数。
1。单词的每个字符应按字母顺序排列
注意:-单词只能包含小写字母
示例:
输入str =“她和他一起住在一个小公寓里”
输出=“在他身上,他击中了eilsv allms aaemnprtt”
function makeAlphabetSentenceSort(str) {
var word = str.split(' ');
for (var j = 0; j < word.length; j++) {
word[j] = word[j].split('').sort().join('');
}
for (var h = 0; h < word.length - 1; h++) {
for (var i = 0; i < word.length - h - 1; i++) {
if (String(word[i]).length > String(word[i + 1]).length) {
var temp = word[i];
word[i] = word[i + 1];
word[i + 1] = temp;
}
}
}
return word.join(' ');
}
console.log(makeAlphabetSentenceSort("she lives with him in a small apartment"));
错误消息是“答案对于任何给定的输入均应有效。”
答案 0 :(得分:0)
进一步思考后,很明显他们的挑战没有遵循自己的规则。它明确指出:
单词只能有小写字母
但是,它通过代码运行(带有标点符号):
he was curious about how it would taste, so he took a small bite.
更糟糕的是,它期望获得以下输出,即使how
出现在saw
之后,其也会将how
放在saw
之前:
a eh it os eh how asw koot .beit allms dlouw abotu ,aestt ciorsuu
因此,要克服这一挑战,您还需要彼此交换相同长度的单词。
以下内容在NodeJS中产生了正确的结果,但在浏览器中却没有,实际上,sort()
在不同的浏览器中给了我不同的结果!
function makeAlphabetSentenceSort(str) {
var word = str.split(' ');
for (var j = 0; j < word.length; j++) {
word[j] = word[j].split('').sort().join('');
}
return word.sort((a, b) => a.length - b.length).join(' ');
}
console.log(makeAlphabetSentenceSort('he was curious about how it would taste, so he took a small bite.'));
然后,我了解了为什么排序如此不可靠,并且这篇文章是不错的参考资料,不幸的是,其中的解决方案提供了可靠的结果,但不是这种挑战所期望的。
https://medium.com/@fsufitch/is-javascript-array-sort-stable-46b90822543f
http://ccc.fidenz.com/en/challenges/challenges/challenge--86
这是一个可怕的设计挑战,您确实应该将精力集中在一个更好的网站上以练习编程,例如HackerRank,而不是这种大杂烩。