zoukankan      html  css  js  c++  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
    
        }
    
    }
  • 相关阅读:
    协程—gevent模块的使用
    协程—概念以及基本使用
    Python—同步和互斥
    Hugo博客搭建
    Linux编辑利器-Vim
    Linux命令与Shell
    python入门基础
    .netcore程序在linux下用supervisor守护
    .netcore中添加Swagger
    winform或wpf中全局异常捕获
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/15143172.html
Copyright © 2011-2022 走看看