题目
给一个字符串数组['a','bc',...],返回按照最小字典序拼接的字符串。字典序:只看字母顺序,即abc<abd,abc<baa,b<aaa(将b补齐为b00)
- 按照常规思路将数组按照字典序进行排序,然后拼接即可,但这么做虽然局部最优,但整体不是最优,比如'b','ba',按照字典序排序后拼接的结果为'bba',但'bab'的字典序比'bba'更小。
- 所以,需要换一种比较器,即a+b的字典序>b+a的字典序,则交换位置
let arr = ["a", "bccc", "abb", "ab", "b", "ba"];
console.log(
arr.sort((a, b) => {
//localeCompare即比较字典序,相等返回0,否则返回1或-1
//这里为什么不直接比较字符串,比如'a'>'b',直接比较字符串也是根据字典序比较,因为sort方法只能根据返回的数值进行比较,不能根据布尔值进行比较
return (a + b).localeCompare(b + a);
})
);