LeetCode68 文字左右對齊

2021-09-13 22:35:53 字數 1647 閱讀 2265

給定乙個單詞陣列和乙個長度 maxwidth,重新排版單詞,使其成為每行恰好有 maxwidth 個字元,且左右兩端對齊的文字。

你應該使用「貪心演算法」來放置給定的單詞;也就是說,盡可能多地往每行中放置單詞。必要時可用空格 』 』 填充,使得每行恰好有 maxwidth 個字元。

要求盡可能均勻分配單詞間的空格數量。如果某一行單詞間的空格不能均勻分配,則左側放置的空格數要多於右側的空格數。

文字的最後一行應為左對齊,且單詞之間不插入額外的空格。

說明:

示例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",

因為最後一行應為左對齊,而不是左右兩端對齊。

第二行同樣為左對齊,這是因為這行只包含乙個單詞。

上面的題目描述還是略顯囉嗦,我整理了一下

我的解答

/**

* 68. 文字左右對齊(貪心,字串,hard)

* * **醜長,但ac87%,可以繼續優化

* 估計只有剛寫完的自己看得懂

* 踩了一些坑,還是要細心,考慮周全

* * @author wuwang

* */

class

solution

else

if(index + count < words.length)

break;}

} len -= scount;

// 所有單詞的長度

// 最後一行,左對齊,單詞間不插入額外的空格if(

(index + count)

==(words.length)

) sb.

(words[i]);

// 最後乙個單詞無空格

l += words[i]

.length()

;while

(l < maxwidth)

}else

if(count >1)

spaceholdercount -=1;

spacecount -= n;}}

else

index += count;

result.

add(sb.

tostring()

);}return result;

}}

leetcode 68 文字左右對齊

原理很簡單,但是寫起來比較複雜,首先將不超過maxwidth的字串放入乙個新的陣列result,不要忽略空格所佔空間 對result進行處理,首先去除字串最後面的乙個或多個空格,然後計算去除空格後的字串大小,用過最大大小減去去除空格之後的字串大小,得到d 用除以單詞個數 1 即為原來每個空格位置需要...

LeetCode68文字左右對齊

1.先取出一行能夠容納的單詞,將這些單詞根據規則填入一行 2.計算出額外空格的數量 spacecount,額外空格就是正常書寫用不到的空格 2.1除去所有單詞的長度 3.平均分布 簡單來說就是商和餘數的計算 4.特殊處理 4.1一行只有乙個單詞,單詞左對齊,右側填滿空格 4.2最後一行,所有單詞左對...

Leetcode 68文字左右對齊 C

思路 貪心演算法,一行一行的處理。1.首先要確定每一行能放下的單詞數。具體方法是 將單詞數n和空格數n 1與每 一行的最大字元數maxwidth來比較。2.確定了單詞數後,還要判斷是否為最後一行,最後一行每個單詞間加乙個空格。如果不是最後一行,要判斷空格數和單詞的間隔數n 1是否整除,整除的話空格數...