題目描述
我們要把給定的字符串 S 從左到右寫到每一行上,每一行的最大寬度為100個單位杠袱,如果我們在寫某個字母的時候會使這行超過了100 個單位,那么我們應(yīng)該把這個字母寫到下一行。我們給定了一個數(shù)組 widths 亮隙,
這個數(shù)組 widths[0] 代表 'a' 需要的單位某弦, widths[1] 代表 'b' 需要的單位桐汤,..., widths[25] 代表 'z' 需要的單位靶壮。
現(xiàn)在回答兩個問題:至少多少行能放下S怔毛,以及最后一行使用的寬度是多少個單位?將你的答案作為長度為2的整數(shù)列表返回腾降。
示例
示例 1:
輸入:
widths = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "abcdefghijklmnopqrstuvwxyz"
輸出: [3, 60]
解釋:
所有的字符擁有相同的占用單位10拣度。所以書寫所有的26個字母,我們需要2個整行和占用60個單位的一行
。
示例 2:
輸入:
widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "bbbcccdddaaa"
輸出: [2, 4]
解釋:
除去字母'a'所有的字符都是相同的單位10抗果,并且字符串 "bbbcccdddaa" 將會覆蓋 9 * 10 + 2 * 4 = 98 個單位.最后一個字母 'a' 將會被寫到第二行筋帖,因為第一行只剩下2個單位了。所以冤馏,這個答案是2行日麸,
第二行有4個單位寬度。
注:
- 字符串 S 的長度在 [1, 1000] 的范圍逮光。
- S 只包含小寫字母代箭。
- widths 是長度為 26的數(shù)組。
- widths[i] 值的范圍在 [2, 10]涕刚。
題解
1.解法一嗡综,使用java語言編寫
class Solution {
public int[] numberOfLines(int[] widths, String S) {
int [] lines = new int[2];
if(S.length() > 0)
lines[0]=1;
int sum=0;
for(int i=0; i<S.length(); i++){
sum+=widths[S.charAt(i)-'a'];
if(sum == 100){
sum=0;
lines[0]++;
}
else if(sum > 100){
sum=widths[S.charAt(i)-'a'];
lines[0]++;
}
if(sum <= 100 && i == S.length()-1){
lines[1]=sum;
}
}
return lines;
}
}
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/number-of-lines-to-write-string
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)杜漠,非商業(yè)轉(zhuǎn)載請注明出處极景。