文本左右對(duì)齊

題目描述:給定一個(gè)單詞數(shù)組和一個(gè)長度?maxWidth,重新排版單詞净宵,使其成為每行恰好有?maxWidth?個(gè)字符敲才,且左右兩端對(duì)齊的文本裹纳。

你應(yīng)該使用“貪心算法”來放置給定的單詞;也就是說紧武,盡可能多地往每行中放置單詞剃氧。必要時(shí)可用空格?' '?填充,使得每行恰好有 maxWidth?個(gè)字符阻星。

要求盡可能均勻分配單詞間的空格數(shù)量朋鞍。如果某一行單詞間的空格不能均勻分配,則左側(cè)放置的空格數(shù)要多于右側(cè)的空格數(shù)妥箕。

文本的最后一行應(yīng)為左對(duì)齊滥酥,且單詞之間不插入額外的空格。

說明:

單詞是指由非空格字符組成的字符序列畦幢。

每個(gè)單詞的長度大于 0坎吻,小于等于?maxWidth。

輸入單詞數(shù)組 words?至少包含一個(gè)單詞宇葱。

示例:

輸入:

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

maxWidth = 16

輸出:

[

? ?"This ? ?is ? ?an",

? ?"example ?of text",

? ?"justification. ?"

]

代碼

public List<String> fullJustify2(String[] words, int maxWidth) {

? ? List<String> ans = new ArrayList<>();

? ? int currentLen = 0;

? ? int start = 0;

? ? int end = 0;

? ? for (int i = 0; i < words.length;) {

? ? ? ? //判斷加入該單詞是否超過最長長度

? ? ? ? //分了兩種情況瘦真,一種情況是加入第一個(gè)單詞,不需要多加 1

? ? ? ? //已經(jīng)有單詞的話黍瞧,再加入單詞诸尽,需要多加個(gè)空格,所以多加了 1

? ? ? ? if (currentLen == 0 && currentLen + words[i].length() <= maxWidth

? ? ? ? ? ? || currentLen > 0 && currentLen + 1 + words[i].length() <= maxWidth) {

? ? ? ? ? ? end++;

? ? ? ? ? ? if (currentLen == 0) {

? ? ? ? ? ? ? ? currentLen = currentLen + words[i].length();

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? currentLen = currentLen + 1 + words[i].length();

? ? ? ? ? ? }

? ? ? ? ? ? i++;

? ? ? ? } else {

? ? ? ? ? ? int sub = maxWidth - currentLen + (end - start) - 1;

? ? ? ? ? ? if (end - start == 1) {

? ? ? ? ? ? ? ? String blank = getStringBlank(sub);

? ? ? ? ? ? ? ? ans.add(words[start] + blank);

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? StringBuilder temp = new StringBuilder();

? ? ? ? ? ? ? ? temp.append(words[start]);

? ? ? ? ? ? ? ? int averageBlank = sub / ((end - start) - 1);

? ? ? ? ? ? ? ? //如果除不盡印颤,計(jì)算剩余空格數(shù)

? ? ? ? ? ? ? ? int missing = sub - averageBlank * ((end - start) - 1);

? ? ? ? ? ? ? ? String blank = getStringBlank(averageBlank + 1);

? ? ? ? ? ? ? ? int k = 1;

? ? ? ? ? ? ? ? for (int j = 0; j < missing; j++) {

? ? ? ? ? ? ? ? ? ? temp.append(blank + words[start+k]);

? ? ? ? ? ? ? ? ? ? k++;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? blank = getStringBlank(averageBlank);

? ? ? ? ? ? ? ? for (; k <(end - start); k++) {

? ? ? ? ? ? ? ? ? ? temp.append(blank + words[start+k]);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ans.add(temp.toString());

? ? ? ? ? ? }

? ? ? ? ? ? start = end;

? ? ? ? ? ? currentLen = 0;

? ? ? ? }

? ? }

? ? StringBuilder temp = new StringBuilder();

? ? temp.append(words[start]);

? ? for (int i = 1; i < (end - start); i++) {

? ? ? ? temp.append(" " + words[start+i]);

? ? }

? ? temp.append(getStringBlank(maxWidth - currentLen));

? ? ans.add(temp.toString());

? ? return ans;

}

//得到 n 個(gè)空白

private String getStringBlank(int n) {

? ? StringBuilder str = new StringBuilder();

? ? for (int i = 0; i < n; i++) {

? ? ? ? str.append(" ");

? ? }

? ? return str.toString();

}

作者:windliang

鏈接:https://leetcode-cn.com/problems/text-justification/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-1-5/

來源:力扣(LeetCode)

著作權(quán)歸作者所有您机。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處年局。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末际看,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子某宪,更是在濱河造成了極大的恐慌仿村,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兴喂,死亡現(xiàn)場(chǎng)離奇詭異蔼囊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)衣迷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門畏鼓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壶谒,你說我怎么就攤上這事云矫。” “怎么了汗菜?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵让禀,是天一觀的道長挑社。 經(jīng)常有香客問我,道長巡揍,這世上最難降的妖魔是什么痛阻? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮腮敌,結(jié)果婚禮上阱当,老公的妹妹穿的比我還像新娘。我一直安慰自己糜工,他們只是感情好弊添,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捌木,像睡著了一般油坝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刨裆,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天免钻,我揣著相機(jī)與錄音,去河邊找鬼崔拥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛凤覆,可吹牛的內(nèi)容都是我干的链瓦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼盯桦,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼慈俯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拥峦,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤贴膘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后略号,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刑峡,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年玄柠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了突梦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡羽利,死狀恐怖宫患,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情这弧,我是刑警寧澤娃闲,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布虚汛,位于F島的核電站,受9級(jí)特大地震影響皇帮,放射性物質(zhì)發(fā)生泄漏卷哩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一玲献、第九天 我趴在偏房一處隱蔽的房頂上張望殉疼。 院中可真熱鬧,春花似錦捌年、人聲如沸瓢娜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眠砾。三九已至,卻和暖如春托酸,著一層夾襖步出監(jiān)牢的瞬間褒颈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工励堡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谷丸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓应结,卻偏偏與公主長得像刨疼,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹅龄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容