屏幕可显示句子的数量
难度:
标签:
题目描述
代码结果
运行时间: 95 ms, 内存: 16.0 MB
/*
* 题目思路:
* 使用Java Stream计算屏幕可显示句子的数量。
* 将句子连接成一个字符串,在屏幕上尽量显示这个字符串的内容,计算完整显示的句子数量。
*/
import java.util.stream.IntStream;
public class Solution {
public int wordsTyping(String[] sentence, int rows, int cols) {
String s = String.join(" ", sentence) + " ";
int len = s.length();
int[] start = {0};
IntStream.range(0, rows).forEach(i -> {
start[0] += cols;
if (s.charAt(start[0] % len) == ' ') {
start[0]++;
} else {
while (start[0] > 0 && s.charAt((start[0] - 1) % len) != ' ') {
start[0]--;
}
}
});
return start[0] / len;
}
}
解释
方法:
这个题解的思路是先把句子数组拼接成一个长字符串,每个单词之间用空格隔开。然后模拟在屏幕上填充这个长字符串,同时记录填充的有效空格数。最后用有效空格数除以长字符串的长度,就可以得到句子在屏幕上重复的次数。在模拟填充的过程中,如果当前行放不下下一个单词,就需要把当前行剩余的空格略过,把下一个单词放到下一行。
时间复杂度:
O(max(mw, rows * cols))
空间复杂度:
O(mw)
代码细节讲解
🦆
在算法中,如果一个单词长度超过屏幕列数,直接返回0的逻辑是基于什么考虑?
▷🦆
为什么在拼接句子时每个单词后要添加一个空格,这对算法的逻辑有什么影响?
▷🦆
在计算重复次数时,为什么使用有效空格数除以整个字符串长度,这种方法的准确性如何保证?
▷🦆
在循环模拟填充过程中,减小有效空格数直到找到空格字符是为了解决什么问题?
▷