Java教程

贪心算法-字符串拼接问题(字典序)

本文主要是介绍贪心算法-字符串拼接问题(字典序),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目:给定一个字符串的数组strs,实现一种拼接顺序,使得所有的字符串拼接起来组成的字符串是所有可能性中字典序最小的,并返回这个字符串。

相关知识:

Java compareTo() 方法

  • 字符串与对象进行比较。
  • 按字典顺序比较两个字符串。

一、什么是字典序

①若字符串长度相等:“abc”和“bck”比较?

将它们看成数和数的比较即可。从最高位开始比,a的ASCII码值小于b的ASCII码。所以"abc"小于“bck”。

②若字符串长度不相等:“b"和"ba"比较?

首先在字符串长度小的“b”后面补上ASCII码值最小的数(这里为了方便就写成0)。变成"b0"和"ba"进行比较。

先看最高位都是b,然后看第二位“0”<"a"。所以“b”小于“ba”。

二、soulution

字符串各自按照字典序排,比较前一个字符串拼接后一个字符与后一个字符串拼接上前一个字符串,取拼接后字符串字典序小的那个

代码:

package Algorithms.greed;

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) {
            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" };  //bwjibwjibwjijp
        System.out.println(lowestString(strs1));

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

    }

}

 

这篇关于贪心算法-字符串拼接问题(字典序)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!