Solution:
思路:
思路是用start變量來記錄下能裝下的句子的總長度褒翰,最后除以一個句子的長度芭梯,就可以得到個數(shù)。
實現(xiàn):
而句子的總長度的求法時要在每個單詞后面加上一個空格(包括最后一個單詞).我們遍歷屏幕的每一行悼泌,然后每次start都加上寬度瓶珊,然后看all[start%len]是否為空格,是的話就start加1,這樣做的好處是可以處理末尾是沒有空格的情況堂鲜,比如寬度為1栈雳,只有一個單詞a,那么我們都知道是這樣放的 a 泡嘴,start變?yōu)?甫恩,len是2,all[start%len]是空格酌予,所以start自增1磺箕,變成2,這樣我們用start/len就知道能放下幾個了抛虫。
對于all[start%len]不為空格的情況松靡,如果all[(start-1)%len]也不為空格,那么start就自減1建椰,進行while循環(huán)雕欺,直至其為空格為止
Time Complexity: O(N) Space Complexity: O(N)
Solution Code:
public class Solution {
public int wordsTyping(String[] sentence, int rows, int cols) {
String s = String.join(" ", sentence) + " "; //而句子的總長度的求法時要在每個單詞后面加上一個空格(包括最后一個單詞)
int start = 0; // start變量來記錄下能裝下的句子的總長度
int l = s.length(); // 一個句子的長度
for (int i = 0; i < rows; i++) { // 我們遍歷屏幕的每一行
start += cols; // 每次start都加上寬度
if (s.charAt(start % l) == ' ') { // 正好能裝下,可以處理末尾是沒有空格的情況棉姐,相當于白加空格1個
start++;
} else {
while (start > 0 && s.charAt((start-1) % l) != ' ') { // 裝不下屠列,減小start循壞再試
start--;
}
}
}
return start / l;
}
}