珠海网站设计价格,微博网页版登录入口,杭州设计院,中国建设银行网站登录目录 1.题目2.答案3.提交结果截图 链接#xff1a; 文本左右对齐 1.题目
给定一个单词数组 words 和一个长度 maxWidth #xff0c;重新排版单词#xff0c;使其成为每行恰好有 maxWidth 个字符#xff0c;且左右两端对齐的文本。
你应该使用 “贪心算法” 来放置给定的单… 目录 1.题目2.答案3.提交结果截图 链接 文本左右对齐 1.题目
给定一个单词数组 words 和一个长度 maxWidth 重新排版单词使其成为每行恰好有 maxWidth 个字符且左右两端对齐的文本。
你应该使用 “贪心算法” 来放置给定的单词也就是说尽可能多地往每行中放置单词。必要时可用空格 填充使得每行恰好有 maxWidth 个字符。
要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配则左侧放置的空格数要多于右侧的空格数。
文本的最后一行应为左对齐且单词之间不插入额外的空格。
注意:
单词是指由非空格字符组成的字符序列。每个单词的长度大于 0小于等于 maxWidth。输入单词数组 words 至少包含一个单词。
示例 1:
输入: words [This, is, an, example, of, text, justification.], maxWidth 16
输出:
[This is an,example of text,justification.
]示例 2:
输入:words [What,must,be,acknowledgment,shall,be], maxWidth 16
输出:
[What must be,acknowledgment ,shall be
]
解释: 注意最后一行的格式应为 shall be 而不是 shall be,因为最后一行应为左对齐而不是左右两端对齐。 第二行同样为左对齐这是因为这行只包含一个单词。示例 3:
输入:words [Science,is,what,we,understand,well,enough,to,explain,to,a,computer.,Art,is,everything,else,we,do]maxWidth 20
输出:
[Science is what we,understand well,enough to explain to,a computer. Art is,everything else we,do
]提示:
1 words.length 3001 words[i].length 20words[i] 由小写英文字母和符号组成1 maxWidth 100words[i].length maxWidth 2.答案
class Solution {public ListString fullJustify(String[] words, int maxWidth) {if (words.length 1) {int leftSpaceNum maxWidth - words[0].length();char[] leftSpaces new char[leftSpaceNum];Arrays.fill(leftSpaces, );return Collections.singletonList(words[0] new String(leftSpaces));}ListString lines new ArrayList();int i 1;int length words[0].length();ListString lineWords new ArrayList();lineWords.add(words[0]);while (i words.length) {if (length 1 words[i].length() maxWidth) {// 记录每行的单词lineWords.add(words[i]);length length 1 words[i].length();} else {// 已经记满一行String line wordsToLine(lineWords, maxWidth, false);lines.add(line);lineWords.clear();lineWords.add(words[i]);length words[i].length();}}String line wordsToLine(lineWords, maxWidth, true);lines.add(line);return lines;}/*** 将单词转化为一行* param lineWords* return*/private String wordsToLine(ListString lineWords, int maxWidth, boolean isLastLine) {assert lineWords.size() 1;int wordsLength lineWords.stream().mapToInt(String::length).sum();if (!isLastLine lineWords.size() 1) {// 非最后一行// 计算每个间隔空格int eachSpaceNum (maxWidth - wordsLength) / (lineWords.size() - 1);char[] eachSpaces new char[eachSpaceNum];Arrays.fill(eachSpaces, );String eachSpaceStr String.valueOf(eachSpaces);// 计算第一个间隔额外空格数int leftSpaceNum (maxWidth - wordsLength) % (lineWords.size() - 1);StringBuilder builder new StringBuilder();for (int i 0; i lineWords.size(); i) {builder.append(lineWords.get(i));if (i ! lineWords.size() - 1) {builder.append(eachSpaceStr);if (leftSpaceNum 0) {builder.append( );leftSpaceNum--;}}}return builder.toString();} else {// 最后一行左对齐即可StringBuilder builder new StringBuilder();for (int i 0; i lineWords.size(); i) {builder.append(lineWords.get(i));if (i ! lineWords.size() - 1) {builder.append( );}}int leftSpaceNum maxWidth - wordsLength - (lineWords.size() - 1);char[] leftSpaces new char[leftSpaceNum];Arrays.fill(leftSpaces, );builder.append(new String(leftSpaces));return builder.toString();}}
}3.提交结果截图 整理完毕完结撒花~