[toc]

题目描述

给你一个字符串s。请你按照单词在 s 中的出现顺序将它们全部竖直返回。
单词应该以字符串列表的形式返回,必要时用空格补位,但输出尾部的空格需要删除(不允许尾随空格)。
每个单词只能放在一列上,每一列中也只能有一个单词。

输入:s = “HOW ARE YOU”
输出:[“HAY”,”ORO”,”WEU”]
解释:每个单词都应该竖直打印。
“HAY”
“ORO”
“WEU”

思路

1.自己的思路

  1. 分割出单词,找出最长的单词长度,给其他单词后边补上空格
  2. 循环给res数组中增加字母
  3. 去除后边的空格

    2.优秀的思路

首先以空格分割字符串,其次找出所有字符串里面最长的那个记录它的长度。因为maxLength最长的长度代表这需要遍历的次数,代表着list里面有多少个string。
所以我们遍历maxLength次,然后再在里面遍历每一个字符串,然后取出每一个字符串的第i个位置上的值,拼接起来。
如果当前字符串的长度小于或者等于遍历的次数i,则直接添加空格,最后遍历完之后要截取字符串,找到第一个非空字符进行截取。

代码实现

1.自己的代码实现

  1. class Solution {
  2. public List<String> printVertically(String s) {
  3. //
  4. // 1. 分割出单词,找出最长的单词长度,给其他单词后边补上空格
  5. // 2. 循环给res数组中增加字母
  6. String[] words = s.split(" ");
  7. int maxLen = 0;
  8. // 找出最长的单词长度
  9. for(String word:words){
  10. maxLen = Math.max(maxLen,word.length());
  11. }
  12. // 填补空格
  13. for(int j=0;j<words.length;j++){
  14. int temp = maxLen-words[j].length();
  15. for(int i=0;i<temp;i++){
  16. words[j] += " ";
  17. }
  18. }
  19. // 进行结果输出
  20. String[] res = new String[maxLen];
  21. // List<Strign> res = new ArrayList<String>
  22. for(int i=0;i<res.length;i++){
  23. for(int j=0;j<words.length;j++){
  24. if(res[i] == null){
  25. res[i] = words[j].charAt(i)+"";
  26. }else res[i] += words[j].charAt(i);
  27. }
  28. }
  29. for(int i=0;i<res.length;i++){
  30. res[i] = "*" + res[i];
  31. res[i] = res[i].trim();
  32. res[i] = res[i].substring(1,res[i].length());
  33. }
  34. return Arrays.asList(res);
  35. }
  36. }

2.优秀的代码实现

class Solution {
    public 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 if(tempLength <= i) {
                    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;
    }
}