Leetcode 68.文本左右对齐

文本左右对齐

给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。

你应该使用"贪心算法"来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ‘ ‘ 填充,使得每行恰好有 maxWidth 个字符。

要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。

文本的最后一行应为左对齐,且单词之间不插入额外的空格。

说明:

  • 单词是指由非空格字符组成的字符序列。
  • 每个单词的长度大于 0,小于等于 maxWidth
  • 输入单词数组 words 至少包含一个单词。

示例:

输入:

words = ["This", "is", "an", "example", "of", "text", "justification."]

maxWidth = 16

输出:

[

"This    is    an",

"example  of text",

"justification.  "

]

 1 import java.util.*;
 2
 3 public class Solution {
 4     public ArrayList<String> fullJustify(String[] words, int maxWidth) {
 5         ArrayList<String> res = new ArrayList<String>();
 6         int n = words.length;
 7         int i = 0;
 8         while (i < n) {
 9             StringBuilder sb = new StringBuilder();
10             int last = i + 1;
11             int len = words[i].length();
12             while (last < n && len + 1 + words[last].length() <= maxWidth) {
13                 len += 1 + words[last].length();
14                 last++;
15             }
16             // 最后一行
17             if (last == n) {
18                 for (int j = i; j < n; j++) {
19                     sb.append(words[j] + " ");
20                 }
21                 sb.deleteCharAt(sb.length() - 1);
22                 for (int j = sb.length(); j < maxWidth; j++) {
23                     sb.append(" ");
24                 }
25             } else {
26                 // 只有一个word
27                 if (last - i == 1) {
28                     sb.append(words[i]);
29                     for (int j = words[i].length(); j < maxWidth; j++)
30                         sb.append(" ");
31                 } else {// 有多个单词
32                     int wordNum = last - i;
33                     int wordTotal = 0;
34                     for (int j = i; j < last; j++) {
35                         wordTotal += words[j].length();
36                     }
37                     // eachSpace为每个单词间的空格数;r是余数,表示前r个空格数为eachSpace+1
38                     int eachSpace = (maxWidth - wordTotal) / (wordNum - 1);
39                     int r = (maxWidth - wordTotal) % (wordNum - 1);
40
41                     for (int j = i; j < last; j++) {
42                         sb.append(words[j]);
43                         if (j < last - 1) {
44                             for (int k = 0; k < eachSpace + ((j - i) < r ? 1 : 0); k++) {
45                                 sb.append(" ");
46                             }
47                         }
48                     }
49                 }
50             }
51             res.add(sb.toString());
52             i = last;
53         }
54         return res;
55     }
56 }

原文地址:https://www.cnblogs.com/kexinxin/p/10163044.html

时间: 2024-10-17 09:43:50

Leetcode 68.文本左右对齐的相关文章

LeetCode --- 68. Text Justification

题目链接:Text Justification Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified. You should pack your words in a greedy approach; that is, pack as many words as you

iOS上如何让按钮文本左对齐问题

// button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效  button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;button.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 这里使用 button.titleLabel.textAlignment = NSTextAlignment

iOS上让按钮文本左对齐问题

一,问题分析 1.在做历史记录视图的时候,由于让键盘退出后才能触发表格的 didselect 那个代理方法,也就是得点两下才触发,而表格中的按钮点一下就可以立即响应. 2.于是我就有了用按钮事件代替 cell 的代理方法. 3.本以为用 contentEdgeInset 和 titleLabel 的 textAlignment就能解决按钮文字的左对齐问题,结果都失败了. 4.结果上网一查,textAlignment"只是让标签中的文本左对齐,但并没有改变标签在按钮中的对齐方式." 5.

iOS上如何让按钮文本左对齐问题(对齐方式)

// button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效 button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; button.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 这里使用button.titleLabel.textAlignment = NSTextAlignmentL

CSS3----vertical-align(文本垂直对齐方式)

一.代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>文本垂直对齐方式vertical-align</title> <style type="text/css"> .head{ margin: 0 0 0 100px; } .container{ margin: 0 0 0 100px; } .contai

设置按钮文本左对齐

// button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效 button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; button.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 这里使用 button.titleLabel.textAlignment = NSTextAlignment

iOS上如何让按钮(UIbutton)文本左对齐展示

// button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效 button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; button.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 在做UI界面的时候一直困惑与如何让button的文字左对齐展示,今天重新遇到.决定彻底解决问题 首先我们会想

不同浏览器下兼容文本两端对齐

在form表单的前端布局中,我们经常需要将文本框的提示文本两端对齐,例如: 比较粗暴的做法是在需要隔离边距的文本中加标签,然后分别控制每个文字的边距,这种方法比直接加空格或者占位符更精准,我之前也都是这么做的.但是写的多了之后开始思考能不能抽象出来用于更多的场景?让代码更好看一些?维护成本更低一些? 1.首先想到是能不能直接靠css解决问题 css .test-justify { text-align: justify; } html <div class="test-justify&qu

css实现文本两端对齐

要实现文本两端对齐,自然会想到css属性text-align: justify;但是试过之后才发现这个属性没有起到作用,这是为什么呢?难道这个属性是个摆设吗?那肯定不是!一定是自己的问题. 查看html代码才知道,原来text-align: justify;这个css属性要起作用,那么html中模块之间一定要添加(空格.换行符.制表符),例如 <p> <span>专 场:</span> 东方源创文玩收藏拍卖专场 </p> <p> <span