【LeetCode】 806. 寫字串需要的行數
阿新 • • 發佈:2018-11-03
1.題目
我們要把給定的字串 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;
}