答案应该对任何给定的输入有效

The answer should be valid for any given input

编写一个函数,将一个句子作为输入并输出一个排序后的句子。

1.Each单词的字符要按字母顺序排列

  1. 单词应根据其字符数按升序排列

注意:- Word 只能包含小写字母

示例:

输入 str = "she lives with him in a small apartment"

输出="a in ehs him hitw 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"));

错误消息是 "The answer should be valid for any given input."

经过进一步思考,很明显他们的挑战并没有遵循他们自己的规则。它明确指出:

Word only can have lowercase letters

然而,它通过代码运行这个(带标点符号):

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 解决方案

以下在 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,而不是这个大杂烩。