javascript - 整理单词失败,并带有一些测试用例

标签 javascript algorithm unit-testing

我在某个入口做测试问题如下:
我们将一个句子定义为一个由空格分隔的单词组成的字符串,该字符串以大写字母后跟小写字母和空格,以句点结尾(即,它满足正则表达式^[a-z][a-z]*.$)。我们希望重新排列句子中的单词,以满足以下条件:
每个单词都是按长度升序排列的。
长度相等的词必须按与原句相同的顺序出现。
重新排列的句子必须格式化为满足正则表达式^[a-z][a-z]*.$。
例如,想想猫和帽子这句话首先,单词按长度排序,保持领带的原始顺序:[还有,猫,帽子]现在重新组合句子,应用格式:和猫帽子。
功能描述
在下面的编辑器中完成函数排列。函数必须返回按所述排列的正确格式的句子。
排列具有以下参数:

sentence:  a well formed sentence string

约束条件
2<=|句子|<105
语句满足正则表达式^[a-z][a-z]*.$。
样本输出
sample
我的解决方案如下:
function arrange(sentence) {
    sentence = sentence.toLowerCase().substring(0,sentence.length-1).trim();
    let sortedTokens = sentence.split(" ").sort((a, b) =>(a.length - b.length));
    let joined = sortedTokens.join(" ") + ".";
    return joined[0].toUpperCase()+ joined.substring(1);
}

不幸的是,它并没有通过以下所有测试(我想我遗漏了一些角落案例):
test
由于测试用例输入被禁止访问,我无法找出原因?

最佳答案

Array.prototype.sort在相等的情况下不稳定
由于user3707125建议的Array.prototype.sort不稳定,并且它在等式的情况下给出了意外的顺序,所以我使用了以下命令,它成功了:

function arrange(sentence) {
     Array.prototype.sort = function(cmp) {
       cmp = !!cmp ? cmp : (a, b) => {
         if (a < b) return -1;
         if (a > b) return 1;
         return 0;
       };
       let stabilizedThis = this.map((el, index) => [el, index]);
       let stableCmp = (a, b) => {
         let order = cmp(a[0], b[0]);
         if (order != 0) return order;
         return a[1] - b[1];
       }
       stabilizedThis.sort(stableCmp);
       for (let i=0; i<this.length; i++) {
         this[i] = stabilizedThis[i][0];
       }
       return this;
    }
    sentence = sentence.toLowerCase().substring(0,sentence.length-1).trim();
    let sortedTokens = sentence.split(" ").sort((a, b) =>(a.length - b.length));
    let joined = sortedTokens.join(" ") + ".";
    return joined[0].toUpperCase()+ joined.substring(1);
}

关于javascript - 整理单词失败,并带有一些测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49711915/

相关文章:

python - 如何重写django测试用例以避免不可预测的偶然失败

unit-testing - 如何模拟从 Controller 测试类注入(inject)域类的服务?

javascript - 多次更改段落以匹配幻灯片中更改的图像

javascript - JS 回调栈

algorithm - 是否总有一些 MST 是最短路径树?

java - Collections.sort() 和通过添加到 TreeSet 中获取排序集合之间的区别?

python - MaxDoubleSliceSum 算法

javascript - 如何通过JQuery JSON数据获取Check Box(@Html.CheckBox)的值

javascript - jquery中订单总数乘以订单数量

visual-studio - VS08 中无法加载测试项目