字符串9:拼接最小字典序练习题
来源:互联网 发布:人工智能黑客类小说 编辑:程序博客网 时间:2024/06/06 06:59
题目:对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。
测试样例:["abc","de"],2"abcde"
思路:类似于题目Array6: 把数组排成最小的数。对于这一类要求拼接得到字面结果最小或者最大的问题,最优的阶梯思路是这样的:对于给定的数组中的元素进行排序,排序的逻辑不再是使用传统的比较数值大小或者比较ascii码的大小,而是通过自定义一个大小的比较器Comparator,并实现compareTo()方法来比较两个元素之间的大小,这个大小如何定义呢?对于str1和str2,如果str1+str2<str2+str1那么说明要想使得拼接后的结果小,应该让str1排在str2的前面。(由于str1+str2和str2+str1得到的结果字符串是长度相同的两个字符串,他们的比较就是比较他们的字典序,可以使用字符串String已有的conpareTo()方法来进行比较,其原理还是逐个位置比较ascii码,由于ascii码的顺序和字典序相同,所以可以使用ascii码的比较来代替字典序的比较)--定义好了大小比较规则后,使用这种自定义的比较器来对数组进行排序,可以直接使用排序的类库Arrays.sort(new Comparator());最终将最小排序下的元素拼接成为字符串就是字典序最小的字符串。这种通过自定义大小比较准则来进行排序使得最终组合最小的方法正确性可以通过数学方法来证明,现在直接承认即可。
常识:Comparable接口中是compareTo()方法,String实现是Comparable接口;定义比较器需要实现的是Comparator接口,Comparator中的是compare()方法,注意compareTo()和compare()方法的返回值都是int而不是boolean,返回的值可能是0123-1等任意值,但是比较器会自动根据正负值来判断大小从而决定排列顺序。在自定好大小比较器之后进行排序时还是依赖于Java的类库来实现排序的。
import java.util.*;//已知各个字符元素,将其进行排列使得合成后的字符串字典序最小:使用自定义比较器Comparator来实现public class Prior { public String findSmallest(String[] strs, int n) { //特殊输入 if(strs==null||strs.length<0) return null; if(strs.length==0) return ""; //使用自定义的大小比较器对数组进行排序 Arrays.sort(strs,new MyComparator()); //返回拼接后的字符串 String result=""; for(int i=0;i<strs.length;i++){ result+=strs[i]; } return result; }}//定义一个自己的比较器class MyComparator implements Comparator<String>{ //重写compare方法 @Override public int compare(String str1,String str2){ String s1=str1+str2; String s2=str2+str1; return s1.compareTo(s2); }}
- 字符串9:拼接最小字典序练习题
- 拼接最小字典序练习题
- 数据结构与算法分析笔记与总结(java实现)--字符串9:拼接最小字典序练习题
- [牛客]拼接最小字典序练习题
- 字符串拼接最小字典
- 【拼接最小字典序字符串】(python)
- 拼接最小字典序 --字符串数组
- 拼接字符串数组使字典序最小
- 拼接最小字典序
- 拼接最小字典序
- 拼接最小字典序练习
- 字符串——拼接最小字典
- 将一个字符串数组中的字符串拼接出来,使得字典序最小
- 牛客网-拼接最小字典序问题
- 拼接最小字典序 类似 [LintCode]379
- 算法编程题6-字符串拼接找到字典序最小组合问题
- 环形字符串最小字典序
- 字符串问题---拼接所有字符串产生字典顺序最小的大字符串
- FCN训练自己的数据集及测试
- 【Android】Activity详解
- 微信小程序-页面跳转失败WAService.js:3 navigateTo:fail url not in app.json
- Minimum Inversion Number
- 4
- 字符串9:拼接最小字典序练习题
- 配置DSN时存在的问题
- Codeforces 803 A. Maximal Binary Matrix (模拟
- psrseInt第二个参数含义
- 统计学习精要 (Elements of Statistical Learning ) 习题 4.1
- eval()函数
- bzoj1877 晨跑
- 字符串10:空格替换练习题
- Centos7.3 安装Mysql5.7并修改初始密码