1. 程式人生 > >【LeetCode】 806. 寫字串需要的行數

【LeetCode】 806. 寫字串需要的行數

1.題目

806

我們要把給定的字串 S 從左到右寫到每一行上,每一行的最大寬度為100個單位,如果我們在寫某個字母的時候會使這行超過了100 個單位,那麼我們應該把這個字母寫到下一行。我們給定了一個數組 widths ,這個陣列 widths[0] 代表 ‘a’ 需要的單位, widths[1] 代表 ‘b’ 需要的單位,…, widths[25] 代表 ‘z’ 需要的單位。
現在回答兩個問題:至少多少行能放下S,以及最後一行使用的寬度是多少個單位?將你的答案作為長度為2的整數列表返回。

2.思路

step1:定義變數用於存放行line和列wid
step2:遍歷字串中的每一個字母,把他對應的寬度相加
step3:如果大於100,則line++,wid=0,並且這個字母要成為下一行的首字母i–

3.程式碼

int line=0,wid=0;
  for(int i=0;i<S.length();i++){
  	if(wid+widths[S[i]-97]>100){
  		line++;
  		wid=0;
        i--;
	  }
	  else{
	  	wid+=widths[S[i]-97];
	  }
  }
  return {line+1,wid};

4.優秀案例

vector<int> res(2,0);
        int curLen=0,lines=1;
        for(auto i:S){
            curLen+=
widths[i-'a']; if(curLen>100){ ++lines; curLen=widths[i-'a']; } } res[0]=lines; res[1]=curLen; return res; }