🤖
AI审核中

1324.竖直打印单词

本文介绍了 LeetCode 1324 “竖直打印单词”题目及其 Java 实现。给定一个由空格分隔的字符串,要求按单词出现顺序垂直排列并返回字符串列表,列末尾不能有多余空格。实现思路:先用 `split(" ")` 将句子拆分为单词数组,遍历求出最长单词长度 `maxLength`;随后逐行(从第 0 行到 `maxLength‑1`)构建 `StringBuilder`,若当前单词在该行有字符则追加,否则追加空格。完成一行后从右向左寻找最后一个非空格字符,截取子串去除尾随空格后加入结果列表。代码示例包括 `printVertically` 方法及主函数演示。

文章摘要

本文介绍了 LeetCode 1324 “竖直打印单词”题目及其 Java 实现。给定一个由空格分隔的字符串,要求按单词出现顺序垂直排列并返回字符串列表,列末尾不能有多余空格。实现思路:先用 `split(" ")` 将句子拆分为单词数组,遍历求出最长单词长度 `maxLength`;随后逐行(从第 0 行到 `maxLength‑1`)构建 `StringBuilder`,若当前单词在该行有字符则追加,否则追加空格。完成一行后从右向左寻找最后一个非空格字符,截取子串去除尾随空格后加入结果列表。代码示例包括 `printVertically` 方法及主函数演示。

代码

package com.zou.d1115;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: 邹祥发
 * @date: 2021/11/15 09:11
 * <p>
 * 1324. 竖直打印单词
 * <p>
 * 给你一个字符串s。请你按照单词在 s 中的出现顺序将它们全部竖直返回。
 * 单词应该以字符串列表的形式返回,必要时用空格补位,但输出尾部的空格需要删除(不允许尾随空格)。
 * 每个单词只能放在一列上,每一列中也只能有一个单词。
 * <p>
 * 输入:s = "HOW ARE YOU"
 * 输出:["HAY","ORO","WEU"]
 * <p>
 * 输入:s = "TO BE OR NOT TO BE"
 * 输出:["TBONTB","OEROOE","   T"]
 * <p>
 * 输入:s = "CONTEST IS COMING"
 * 输出:["CIC","OSO","N M","T I","E N","S G","T"]
 */
public class PrintWordsVertically {
    public static void main(String[] args) {
        String str = "CONTEST IS COMING";
        System.out.println(printVertically(str));
    }

    public static List<String> printVertically(String s) {
        String[] split = s.split(" ");
        List<String> list = new ArrayList<>();
        int maxLength = 0;
        for (String s1 : split) {
            int tempLength = s1.length();
            if (tempLength > maxLength) {
                maxLength = tempLength;
            }
        }
        for (int i = 0; i < maxLength; i++) {
            StringBuilder sb = new StringBuilder();
            for (String s1 : split) {
                int tempLength = s1.length();
                if (tempLength > i) {
                    char c = s1.charAt(i);
                    sb.append(c);
                } else {
                    sb.append(" ");
                }
            }
            int endIndex = sb.length() - 1;
            for (; endIndex >= 0; endIndex--) {
                char c = sb.charAt(endIndex);
                if (c != ' ') {
                    break;
                }
            }
            list.add(sb.substring(0, endIndex + 1));
        }
        return list;
    }
}

结果

0 条评论

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧

评论区 0

头像
 0 条评论