字符串问题---拼接所有字符串产生字典顺序最小的大字符串

【问题】

  给定一个字符串类型的数组strs,请找到一种拼接顺序,使得将所有的字符串拼接起来组成的大字符串是所有可能性中字典顺序最小的,并返回这个大字符串。

【举例】

  strs = [“abc”, “de”],可以拼接成 “abcde”,也可以拼接成 “deabc”,但前者的字典顺序更小,所以返回 “abcde”

  strs = [“b”, “ba”],可以拼成 “bba”,也可以拼成 “bab”,但前者的字典顺序更小,所以返回 “bab”。

【基本思路】

  有一种思路为:先把strs中的字符串按照字典顺序排序,然后将串起来的结果返回。这么做是错误的,例如【举例】中的第二条,按照字典顺序排应该是b、ba,串起来的结果是bba,但是正确答案是bab。所以这个思路行不通。正确的排序方式如下:

  假设两个字符分别是a,b。a和b拼起来的字符串表示为a.b,那么如果a.b的字典顺序小于b.a,就把a放在前面,否则把b放在前面。每两个字符之间都按照这个标准进行比较,以此标准排序后,最后串起来的结果就是正确答案。证明太复杂,省略。

下面是使用python3.5实现的代码。

关于python2/3 sort方法和sorted函数的使用可以参考我的另一篇博客。点此链接

#拼接所有字符串产生字典顺序最小的大字符串
def lowestString(chas):
    if chas == None or len(chas) == 0:
        return ""
    from functools import cmp_to_key
    chas = sorted(chas, key=cmp_to_key(lambda x,y: 1 if x+y > y+x else -1))
    return ''.join(chas)

你可能感兴趣的:(数据结构与算法)