朝阳港网站建设方案北京梵客装饰
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:10
当前位置: 首页 > news >正文
朝阳港网站建设方案,北京梵客装饰,做彩铃的网站,买程序的网站文章目录 68. 文本左右对齐#xff1a;样例 1#xff1a;样例 2#xff1a;样例 3#xff1a;提示#xff1a; 分析#xff1a;题解#xff1a;rust#xff1a;go#xff1a;c#xff1a;python#xff1a;java#xff1a; 68. 文本左右对齐#xff1a; 给定一个… 文章目录 68. 文本左右对齐样例 1样例 2样例 3提示 分析题解rustgocpythonjava 68. 文本左右对齐 给定一个单词数组 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 分析 面对这道算法题目二当家的再次陷入了沉思。首先要仔细理解题目的意思。每行有最大宽度在宽度范围内尽可能多的放置单词单词间的空格尽可能平均也就是最大差一个空格而且多的空格要都在左面的单词之间。不难理解但是实现起来有很多细节比较繁琐容易出错应该尽量复用方法或者函数。我们需要一个在单词之间填充指定个数空格的方法或者函数可以拆分为拼装指定个数个空格为字符串的方法或者函数以及在单词之间插入指定字符串的方法或者函数这样很多地方可以复用。 题解 rust impl Solution {pub fn full_justify(words: VecString, maxwidth: i32) - VecString {// blank 返回长度为 n 的由空格组成的字符串fn blank(n: usize) - String {(0..n).map(|| { }).collect()}// join 返回用 sep 拼接 [left, right) 范围内的 words 组成的字符串fn join(words: VecString, left: usize, right: usize, sep: str) - String {let mut str String::from(words[left].as_str());(left 1..right).for_each(|i| {str.push_str(sep);str.push_str(words[i].as_str());});return str;}let max_width max_width as usize;let mut ans Vec::new();let (mut right, n) (0, words.len());loop {let left right; // 当前行的第一个单词在 words 的位置let mut sum_len 0; // 统计这一行单词长度之和// 循环确定当前行可以放多少单词注意单词之间应至少有一个空格while right n sum_len words[right].len() right - left max_width {sum_len words[right].len();right 1;}// 当前行是最后一行单词左对齐且单词之间应只有一个空格在行末填充剩余空格if right n {let mut row join(words, left, n, );row.push_str(blank(max_width - row.len()).as_str());ans.push(row);return ans;}let num_words right - left;let num_spaces max_width - sum_len;// 当前行只有一个单词该单词左对齐在行末填充剩余空格if num_words 1 {let mut row String::from(words[left].as_str());row.push_str(blank(num_spaces).as_str());ans.push(row);continue;}// 当前行不只一个单词let avg_spaces num_spaces / (num_words - 1);let extra_spaces num_spaces % (num_words - 1);let mut row String::new();row.push_str(join(words, left, left extra_spaces 1, blank(avg_spaces 1).as_str()).as_str()); // 拼接额外加一个空格的单词row.push_str(blank(avg_spaces).as_str());row.push_str(join(words, left extra_spaces 1, right, blank(avg_spaces).as_str()).as_str()); // 拼接其余单词ans.push(row);}} }go func fullJustify(words []string, maxWidth int) (ans []string) {blank : func(n int) string {return strings.Repeat( , n)}right, n : 0, len(words)for {left : right // 当前行的第一个单词在 words 的位置sumLen : 0 // 统计这一行单词长度之和// 循环确定当前行可以放多少单词注意单词之间应至少有一个空格for right n sumLenlen(words[right])right-left maxWidth {sumLen len(words[right])right}// 当前行是最后一行单词左对齐且单词之间应只有一个空格在行末填充剩余空格if right n {s : strings.Join(words[left:], )ans append(ans, sblank(maxWidth-len(s)))return}numWords : right - leftnumSpaces : maxWidth - sumLen// 当前行只有一个单词该单词左对齐在行末填充剩余空格if numWords 1 {ans append(ans, words[left]blank(numSpaces))continue}// 当前行不只一个单词avgSpaces : numSpaces / (numWords - 1)extraSpaces : numSpaces % (numWords - 1)s1 : strings.Join(words[left:leftextraSpaces1], blank(avgSpaces1)) // 拼接额外加一个空格的单词s2 : strings.Join(words[leftextraSpaces1:right], blank(avgSpaces)) // 拼接其余单词ans append(ans, s1blank(avgSpaces)s2)} }c class Solution { private:// blank 返回长度为 n 的由空格组成的字符串string blank(int n) {return string(n, );}// join 返回用 sep 拼接 [left, right) 范围内的 words 组成的字符串string join(vectorstring words, int left, int right, string sep) {string s words[left];for (int i left 1; i right; i) {s sep words[i];}return s;} public:vectorstring fullJustify(vectorstring words, int maxWidth) {vectorstring ans;int right 0, n words.size();while (true) {int left right; // 当前行的第一个单词在 words 的位置int sumLen 0; // 统计这一行单词长度之和// 循环确定当前行可以放多少单词注意单词之间应至少有一个空格while (right n sumLen words[right].length() right - left maxWidth) {sumLen words[right].length();}// 当前行是最后一行单词左对齐且单词之间应只有一个空格在行末填充剩余空格if (right n) {string s join(words, left, n, );ans.emplace_back(s blank(maxWidth - s.length()));return ans;}int numWords right - left;int numSpaces maxWidth - sumLen;// 当前行只有一个单词该单词左对齐在行末填充剩余空格if (numWords 1) {ans.emplace_back(words[left] blank(numSpaces));continue;}// 当前行不只一个单词int avgSpaces numSpaces / (numWords - 1);int extraSpaces numSpaces % (numWords - 1);string s1 join(words, left, left extraSpaces 1, blank(avgSpaces 1)); // 拼接额外加一个空格的单词string s2 join(words, left extraSpaces 1, right, blank(avgSpaces)); // 拼接其余单词ans.emplace_back(s1 blank(avgSpaces) s2);}} };python class Solution:def fullJustify(self, words: List[str], maxWidth: int) - List[str]:def blank(n: int) - str:return * nans []right, n 0, len(words)while True:left right # 当前行的第一个单词在 words 的位置sum_len 0 # 统计这一行单词长度之和# 循环确定当前行可以放多少单词注意单词之间应至少有一个空格while right n and sum_len len(words[right]) right - left maxWidth:sum_len len(words[right])right 1# 当前行是最后一行单词左对齐且单词之间应只有一个空格在行末填充剩余空格if right n:s .join(words[left:])ans.append(s blank(maxWidth - len(s)))breaknum_words right - leftnum_spaces maxWidth - sum_len# 当前行只有一个单词该单词左对齐在行末填充空格if num_words 1:ans.append(words[left] blank(num_spaces))continue# 当前行不只一个单词avg_spaces num_spaces // (num_words - 1)extra_spaces num_spaces % (num_words - 1)s1 blank(avg_spaces 1).join(words[left:left extra_spaces 1]) # 拼接额外加一个空格的单词s2 blank(avg_spaces).join(words[left extra_spaces 1:right]) # 拼接其余单词ans.append(s1 blank(avg_spaces) s2)return ans java class Solution {public ListString fullJustify(String[] words, int maxWidth) {ListString ans new ArrayListString();int right 0, n words.length;while (true) {int left right; // 当前行的第一个单词在 words 的位置int sumLen 0; // 统计这一行单词长度之和// 循环确定当前行可以放多少单词注意单词之间应至少有一个空格while (right n sumLen words[right].length() right - left maxWidth) {sumLen words[right].length();}// 当前行是最后一行单词左对齐且单词之间应只有一个空格在行末填充剩余空格if (right n) {StringBuilder sb join(words, left, n, );sb.append(blank(maxWidth - sb.length()));ans.add(sb.toString());return ans;}int numWords right - left;int numSpaces maxWidth - sumLen;// 当前行只有一个单词该单词左对齐在行末填充剩余空格if (numWords 1) {StringBuilder sb new StringBuilder(words[left]);sb.append(blank(numSpaces));ans.add(sb.toString());continue;}// 当前行不只一个单词int avgSpaces numSpaces / (numWords - 1);int extraSpaces numSpaces % (numWords - 1);StringBuilder sb new StringBuilder();sb.append(join(words, left, left extraSpaces 1, blank(avgSpaces 1))); // 拼接额外加一个空格的单词sb.append(blank(avgSpaces));sb.append(join(words, left extraSpaces 1, right, blank(avgSpaces))); // 拼接其余单词ans.add(sb.toString());}}// blank 返回长度为 n 的由空格组成的字符串private StringBuilder blank(int n) {StringBuilder sb new StringBuilder();for (int i 0; i n; i) {sb.append( );}return sb;}// join 返回用 sep 拼接 [left, right) 范围内的 words 组成的字符串private StringBuilder join(String[] words, int left, int right, CharSequence sep) {StringBuilder sb new StringBuilder(words[left]);for (int i left 1; i right; i) {sb.append(sep);sb.append(words[i]);}return sb;} }非常感谢你阅读本文~ 欢迎【点赞】【收藏】【评论】三连走一波~ 放弃不难但坚持一定很酷~ 希望我们大家都能每天进步一点点~ 本文由 二当家的白帽子https://le-yi.blog.csdn.net/ 博客原创~
- 上一篇: 朝阳seo推广东莞网站建设优化推广
- 下一篇: 朝阳区网站开发公司家用机能否做网站服务器
相关文章
-
朝阳seo推广东莞网站建设优化推广
朝阳seo推广东莞网站建设优化推广
- 技术栈
- 2026年03月21日
-
超炫网站模板微信怎么建小网站
超炫网站模板微信怎么建小网站
- 技术栈
- 2026年03月21日
-
超酷html5效果的工作室网站程序做哪个网站最简单
超酷html5效果的工作室网站程序做哪个网站最简单
- 技术栈
- 2026年03月21日
-
朝阳区网站开发公司家用机能否做网站服务器
朝阳区网站开发公司家用机能否做网站服务器
- 技术栈
- 2026年03月21日
-
朝阳市网站制作网站权重接口
朝阳市网站制作网站权重接口
- 技术栈
- 2026年03月21日
-
潮汕美食网站怎么做甘肃省住房和城乡建设部网站
潮汕美食网站怎么做甘肃省住房和城乡建设部网站
- 技术栈
- 2026年03月21日






