Solution:
思路:
思路是用start变量来记录下能装下的句子的总长度,最后除以一个句子的长度,就可以得到个数。
实现:
而句子的总长度的求法时要在每个单词后面加上一个空格(包括最后一个单词).我们遍历屏幕的每一行,然后每次start都加上宽度,然后看all[start%len]是否为空格,是的话就start加1,这样做的好处是可以处理末尾是没有空格的情况,比如宽度为1,只有一个单词a,那么我们都知道是这样放的 a ,start变为1,len是2,all[start%len]是空格,所以start自增1,变成2,这样我们用start/len就知道能放下几个了。
对于all[start%len]不为空格的情况,如果all[(start-1)%len]也不为空格,那么start就自减1,进行while循环,直至其为空格为止
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;
}
}