美文网首页
拼接顺序

拼接顺序

作者: stoneyang94 | 来源:发表于2018-08-28 19:52 被阅读0次

题目:拼接顺序(算法课第七课)

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

字典序

字符串字典序:

  1. 当字符串长度相等时 。 从左向右。 c>a (c的ascll码大于a)后边的不需要判断 确定 ca 大于 ac
ca > ac  
  1. 当字符串长度不等时 。 长度短的字符串 自动右边补零 ,扩大到相等长度再比较
cac < d  

d = d00,cac < d00

举例

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放在前面。每两个字符之间都按照这个标准进行比较,以此标准排序后,最后串起来的结果就是正确答案。证明太复杂,省略。

代码

import java.util.Arrays;
import java.util.Comparator;

public class LowestLexicography {

    public static class MyComparator implements Comparator<String> {
        @Override
        public int compare(String a, String b) {//a做前缀和b做前缀,那个更小
            return (a + b).compareTo(b + a);
        }
    }

    public static String lowestString(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }
        Arrays.sort(strs, new MyComparator());
        String res = "";
        for (int i = 0; i < strs.length; i++) {
            res += strs[i];
        }
        return res;
    }

    public static void main(String[] args) {
        String[] strs1 = { "jibw", "ji", "jp", "bw", "jibw" };
        System.out.println(lowestString(strs1));

        String[] strs2 = { "ba", "b" };
        System.out.println(lowestString(strs2));
    }
}

输出:

bwjibwjibwjijp
bab

相关文章

  • 拼接顺序

    题目:拼接顺序(算法课第七课) 给定一个字符串类型的数组strs,请找到一种拼接顺序,使得将所有的字符串拼接起来组...

  • numpy拼接数组之vstack,hstack

    hstack是水平方向拼接数组vstack是垂直方向拼接数组拼接顺序是参数的输入顺序,如a,b,c三个数组,np....

  • 3_8拼接最小字典序

    对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。 给定...

  • 拼接最小字典序

    题目 对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。...

  • 算法(9) 拼接最小字符串

    描述对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。给...

  • 问题:求最小字符串拼接序列

    对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。不同于...

  • ConcatAdapter

    ConcatAdapter 多个adapter 根据一定的顺序拼接 MutiType 类型实现 实现方案 第三方库...

  • iOS开发 「RAC」RAC信号组合的妙用

    • concat:按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号,依赖关系把一组信号串联起来,前面一个...

  • Json串key按照字典顺序拼接

    对于待签名字符串拼写规则:参数名的k按照字典顺序排列,每个参数(k-v)之间用“&”链接。如果v为普通元素集合,则...

  • Swift - 字典 拼接成 URL字符串

    将字典中的键值对按照一定顺序拼接成到get 请求的参数中 var signParmeters : [String:...

网友评论

      本文标题:拼接顺序

      本文链接:https://www.haomeiwen.com/subject/itoqwftx.html