給定乙個單詞陣列和乙個長度 maxwidth,重新排版單詞,使其成為每行恰好有 maxwidth 個字元,且左右兩端對齊的文字。
你應該使用「貪心演算法」來放置給定的單詞;也就是說,盡可能多地往每行中放置單詞。必要時可用空格' '
填充,使得每行恰好有 maxwidth 個字元。
要求盡可能均勻分配單詞間的空格數量。如果某一行單詞間的空格不能均勻分配,則左側放置的空格數要多於右側的空格數。
文字的最後一行應為左對齊,且單詞之間不插入額外的空格。
說明:
示例:
輸入:
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 "
]
思路:遍歷整個字串陣列,我們採用兩個變數c1和c2分別來統計,字串所佔的文字(每兩個字串之間至少有乙個空格)的最小長度和字串的總長度(沒有空格)。當c1的大小超過maxwidth時,我們就找到了一行文字,接下來該怎麼規劃這行文字呢?具體分為兩種情況:當這一行文字只有乙個字串的時候,那麼就放置在前面,後面補齊空格即可。當這一行文字有多個字串的時候:
1、算出這行文字除了所有字串總長度c2之外,還剩下多少空格。
2、算出一共有幾個位置來分配這些空格。
3、1中結果/2中結果,算出每個位置至少放多少空格,用num表示。
4、考慮到當空格不能均勻分配的時候,多出來的空格數,用over_num表示,要盡可能放在前面的位置。
所有的字串處理完了之後,要額外考慮一下最後一行文字。要盡可能可前面位置放置,而且每個字串之間只有乙個空格,剩下的位置補齊空格即可。
class solution
if(s2.size()>maxwidth) s2.resize(maxwidth);//有可能s2.size()比maxwidth多出來乙個空格
s2+=string(maxwidth-s2.size(),' ');
re.back()=s2;
return re;
}};
leetcode 68 文字左右對齊
原理很簡單,但是寫起來比較複雜,首先將不超過maxwidth的字串放入乙個新的陣列result,不要忽略空格所佔空間 對result進行處理,首先去除字串最後面的乙個或多個空格,然後計算去除空格後的字串大小,用過最大大小減去去除空格之後的字串大小,得到d 用除以單詞個數 1 即為原來每個空格位置需要...
LeetCode68 文字左右對齊
給定乙個單詞陣列和乙個長度 maxwidth,重新排版單詞,使其成為每行恰好有 maxwidth 個字元,且左右兩端對齊的文字。你應該使用 貪心演算法 來放置給定的單詞 也就是說,盡可能多地往每行中放置單詞。必要時可用空格 填充,使得每行恰好有 maxwidth 個字元。要求盡可能均勻分配單詞間的空...
LeetCode68文字左右對齊
1.先取出一行能夠容納的單詞,將這些單詞根據規則填入一行 2.計算出額外空格的數量 spacecount,額外空格就是正常書寫用不到的空格 2.1除去所有單詞的長度 3.平均分布 簡單來說就是商和餘數的計算 4.特殊處理 4.1一行只有乙個單詞,單詞左對齊,右側填滿空格 4.2最後一行,所有單詞左對...