二刷68. Text Justification

Hard LinkedIn Tag
這個(gè)題第一次做的時(shí)候確實(shí)是完全懂的夺欲,但是拿來(lái)再自己做還是挺多細(xì)節(jié)不知道怎么處理的嫂伞。而且這種題本身就是很龜毛的那種題涨岁,自己想有點(diǎn)overwhelming感覺(jué)一大波細(xì)節(jié)向你襲來(lái)仍翰。

這道題注意幾個(gè)地方吧:

  • 大框架用while循環(huán)移動(dòng)start index(此行開(kāi)始的word index), 每次找到這一行能寫(xiě)的所有詞最后一個(gè)詞的index 后面那個(gè)index last(方便內(nèi)部while 循環(huán)break出來(lái))

  • 先加words[index], 然后根據(jù)兩類(lèi)情況處理后面的單詞安排憔鬼。

  • 一種情況是左對(duì)齊龟劲,當(dāng)此行是最后一行或者此行只有一個(gè)單詞胃夏,我們就左對(duì)齊。意思就是單詞之間正常間隔一個(gè)space, 不再添加額外的space昌跌,然后寫(xiě)完了單詞之后全是空格.

  • 一種情況是中間對(duì)齊仰禀。這種情況就要計(jì)算gap數(shù),每個(gè)gap應(yīng)該平攤多少個(gè)extra spaces, 以及如何分配平均分配后剩余下來(lái)的spaces.

計(jì)算numOfGaps很簡(jiǎn)單蚕愤,只需要計(jì)算改行總的單詞然后減一即可答恶。注意我們對(duì)于兩種大情況,都是先把正常間隔的那一個(gè)space是考慮了進(jìn)去的萍诱。所以第一種情況悬嗓,我們直接遍歷index后面的所有改行單詞,先加一個(gè)空格裕坊,再加單詞包竹。 加完之后把改行還不到maxWidth剩下的用space填滿(mǎn)。

第二種情況籍凝,我們要計(jì)算除開(kāi)那個(gè)正常情況下間隔的一個(gè)空格之外周瞎,每個(gè)單詞之間還要平攤幾個(gè):spacesPerGap = (maxWidth - curtLen) / numOfGaps;如果還有剩下的地方?jīng)]填滿(mǎn),我們還要從左到右拿空格去填饵蒂,所以我們也要計(jì)算remainSpaces = (maxWidth - curtLen) % numOfGaps; 然后我們遍歷index之后的所有單詞声诸,每次都先把空格給填好了,先是把spacesPerGap填好退盯,然后看看如果還剩下remianSpaces就填一個(gè)双絮。再填單詞。這樣最后一次循環(huán)結(jié)束后index跳到last繼續(xù)看下一個(gè)單詞得问。

class Solution {
    public List<String> fullJustify(String[] words, int maxWidth) {
        List<String> res = new ArrayList<>();
        if (words == null || words.length == 0){
            return res;
        }
        int index = 0;
        while (index < words.length){
            int curtLen = words[index].length();
            int last = index + 1;
            while (last < words.length){
                if (curtLen + 1 + words[last].length() > maxWidth){
                    break;
                }
                curtLen += 1 + words[last].length();
                last++;
            }
            StringBuilder line = new StringBuilder();
            line.append(words[index]);
            int numOfGaps = last - 1 - index;
            //left justify            
            if (last == words.length || numOfGaps == 0){
                for (int i = index + 1; i < last; i++){
                    line.append(" ");
                    line.append(words[i]);
                }
                for (int i = line.length(); i < maxWidth; i++){
                    line.append(" ");
                }
            } else {
                //middle justify
                //first distribute spaces evenly
                //then from left to right assign spaces left
                int spacePerGap = (maxWidth - curtLen) / numOfGaps;
                int remainSpaces = (maxWidth - curtLen) % numOfGaps;
                for (int i = index + 1; i < last; i++){
                    for (int k = 0; k < spacePerGap; k++){
                        line.append(" ");
                    }
                    if (remainSpaces > 0){
                        line.append(" ");
                        remainSpaces--;
                    }
                    line.append(" ");
                    line.append(words[i]);
                }
            }
            res.add(line.toString());
            index = last;
        }
        return res;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市软免,隨后出現(xiàn)的幾起案子宫纬,更是在濱河造成了極大的恐慌,老刑警劉巖膏萧,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漓骚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡榛泛,警方通過(guò)查閱死者的電腦和手機(jī)蝌蹂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)曹锨,“玉大人孤个,你說(shuō)我怎么就攤上這事∨婕颍” “怎么了齐鲤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵斥废,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我给郊,道長(zhǎng)牡肉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任淆九,我火速辦了婚禮统锤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炭庙。我一直安慰自己饲窿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布煤搜。 她就那樣靜靜地躺著免绿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擦盾。 梳的紋絲不亂的頭發(fā)上嘲驾,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音迹卢,去河邊找鬼辽故。 笑死,一個(gè)胖子當(dāng)著我的面吹牛腐碱,可吹牛的內(nèi)容都是我干的誊垢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼症见,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼喂走!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谋作,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芋肠,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后遵蚜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帖池,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吭净,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了睡汹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寂殉,死狀恐怖囚巴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤文兢,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布晤斩,位于F島的核電站,受9級(jí)特大地震影響姆坚,放射性物質(zhì)發(fā)生泄漏澳泵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一兼呵、第九天 我趴在偏房一處隱蔽的房頂上張望兔辅。 院中可真熱鬧,春花似錦击喂、人聲如沸维苔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)介时。三九已至,卻和暖如春凌彬,著一層夾襖步出監(jiān)牢的瞬間沸柔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工铲敛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褐澎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓伐蒋,卻偏偏與公主長(zhǎng)得像工三,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子先鱼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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