給定乙個單詞陣列和乙個長度 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是否整除,整除的話空格數...