【leetcode 1451】重新排列句子中的单词
①请你重新排列 text 中的单词,使所有单词按其长度的升序排列。如果两个单词的长度相同,则保留其在原句子中的相对顺序。
②单词以空格分开,句子首字母需大写
方法一、利用匿名内部类Comparator并重写compare方法实现根据单词长度排序
public String arrangeWords(String s) {
if(s.length()==0||s==null){
return s;
}
String[] ss=s.toLowerCase().split(" ");
Arrays.sort(ss,new Comparator(){
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();// 通过长度排序单词
}
});
StringBuilder res=new StringBuilder();
res.append(ss[0].substring(0,1).toUpperCase());
res.append(ss[0].substring(1));
for(int i=1;i<ss.length;i++){
res.append(" ");
res.append(ss[i]);
}
return res.toString();
}
方法二、利用Java 8 新特性Stream。
利用Stream类中的sort方法,自定义排序规则
public static String arrangeWords(String s) {
if(s.length()==0||s==null){
return s;
}
List<String> l=Arrays.asList(s.toLowerCase().split(" "));
l=l.stream().sorted(Comparator.comparing(String::length)).collect(Collectors.toList());//!!!
StringBuilder rs=new StringBuilder();
l.forEach(s1->{
rs.append(s1);
rs.append(" ");
});
String result=rs.substring(0,1).toUpperCase()+rs.substring(1,rs.length()-1);
return result;
}
方法二有关Stream的相关操作的具体说明讲在另一篇博客中专门讲述。。。先给自己留个坑,届时链接会附在此处: