Q:Given a string s. Return all the words vertically in the same order in which they appear in s.
Words are returned as a list of strings, complete with spaces when is necessary. (Trailing spaces are not allowed).
Each word would be put on only one column and that in one column there will be only one word.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/print-words-vertically
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
A:
class Solution {
public List<String> printVertically(String s) {
String[] words = s.split(" ");
int length = words[0].length();
//得出最长单词长度,确定循环次数
for(String word : words){
length = Math.max(length, word.length());
}
List<String> newWords = new ArrayList<>();
//双层循环拼接出新的string
for(int i = 0; i < length; i ++){
StringBuffer sb = new StringBuffer();
for(String word : words){
sb.append(i < word.length() ? word.charAt(i) : " ");
}
String newWord = trimEnd(sb.toString());
newWords.add(newWord);
}
return newWords;
}
//尾部去空格(包含ASC<32的特殊字符,参考jdk trim源码)
public static String trimEnd(String sourceStr){
int start = 0;
int length = sourceStr.length();
char[] source = sourceStr.toCharArray();
while(start < length && source[length - 1] <= ' '){
length --;
}
return length < sourceStr.length() ? sourceStr.substring(0, length) : sourceStr;
}
}