Lc5413_重新排列句子中的单词

package com.example.demo;

/**
 * 5413. 重新排列句子中的单词
 * 显示英文描述
 * 我的提交
 * 返回竞赛
 * <p>
 * 通过的用户数
 * 1668
 * 尝试过的用户数
 * 2012
 * 用户总通过次数
 * 1678
 * 用户总提交次数
 * 3409
 * 题目难度
 * Medium
 * 「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子 text :
 * 句子的首字母大写
 * text 中的每个单词都用单个空格分隔。
 * 请你重新排列 text 中的单词,使所有单词按其长度的升序排列。如果两个单词的长度相同,则保留其在原句子中的相对顺序。
 * 请同样按上述格式返回新的句子。
 * <p>
 * 示例 1:
 * 输入:text = "Leetcode is cool"
 * 输出:"Is cool leetcode"
 * 解释:句子中共有 3 个单词,长度为 8 的 "Leetcode" ,长度为 2 的 "is" 以及长度为 4 的 "cool" 。
 * 输出需要按单词的长度升序排列,新句子中的第一个单词首字母需要大写。
 * 示例 2:
 * 输入:text = "Keep calm and code on"
 * 输出:"On and keep calm code"
 * 解释:输出的排序情况如下:
 * "On" 2 个字母。
 * "and" 3 个字母。
 * "keep" 4 个字母,因为存在长度相同的其他单词,所以它们之间需要保留在原句子中的相对顺序。
 * "calm" 4 个字母。
 * "code" 4 个字母。
 * 示例 3:
 * 输入:text = "To be or not to be"
 * 输出:"To be or to be not"
 */
public class Lc5413 {
    public static String arrangeWords(String text) {
        String[] strs = text.split(" ");
        for (int i = 0; i < strs.length; i++) {
            for (int j = 0; j < strs.length - 1; j++) {
                if (strs[j].length() > strs[j + 1].length()) {
                    String temp = strs[j];
                    strs[j] = strs[j + 1];
                    strs[j + 1] = temp;
                }
            }
        }


        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < strs.length; i++) {
            if (i == 0) {
                String temp =
                        strs[i].substring(0, 1).toUpperCase() + strs[i].substring(1, strs[i].length());
                stringBuffer.append(temp);

            } else {
                stringBuffer.append(" ");
                stringBuffer.append(strs[i].toLowerCase());
            }

        }


        return stringBuffer.toString();
    }

    public static void main(String[] args) {
//        String str = "Leetcode is cool";
        String str = "Keep calm and code on";
        System.out.println(arrangeWords(str));
    }
}

相关推荐