1324.竖直打印单词

  算法   4分钟   659浏览   0评论

代码

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 条评论