给你一个 rows x cols
的屏幕和一个用 非空 的单词列表组成的句子,请你计算出给定句子可以在屏幕上完整显示的次数。
注意:
- 一个单词不能拆分成两行。
- 单词在句子中的顺序必须保持不变。
- 在一行中 的两个连续单词必须用一个空格符分隔。
- 句子中的单词总量不会超过 100。
- 每个单词的长度大于 0 且不会超过 10。
- 1 ≤
rows
,cols
≤ 20,000.
示例 1:
输入: rows = 2, cols = 8, 句子 sentence = ["hello", "world"] 输出: 1 解释: hello--- world--- 字符 '-' 表示屏幕上的一个空白位置。
示例 2:
输入: rows = 3, cols = 6, 句子 sentence = ["a", "bcd", "e"] 输出: 2 解释: a-bcd- e-a--- bcd-e- 字符 '-' 表示屏幕上的一个空白位置。
示例 3:
输入: rows = 4, cols = 5, 句子 sentence = ["I", "had", "apple", "pie"] 输出: 1 解释: I-had apple pie-I had-- 字符 '-' 表示屏幕上的一个空白位置。
我们将句子的每个单词拼接上一个空格,然后把句子拼接起来,得到字符串 ["hello", "world"]
,得到的字符串为 "hello world "
。记
接下来,我们使用贪心的方法,找到最大的可显示句子数。定义一个变量
我们循环
循环结束,返回
时间复杂度
class Solution:
def wordsTyping(self, sentence: List[str], rows: int, cols: int) -> int:
s = " ".join(sentence) + " "
m = len(s)
cur = 0
for _ in range(rows):
cur += cols
if s[cur % m] == " ":
cur += 1
while cur and s[(cur - 1) % m] != " ":
cur -= 1
return cur // m
class Solution {
public int wordsTyping(String[] sentence, int rows, int cols) {
String s = String.join(" ", sentence) + " ";
int m = s.length();
int cur = 0;
while (rows-- > 0) {
cur += cols;
if (s.charAt(cur % m) == ' ') {
++cur;
} else {
while (cur > 0 && s.charAt((cur - 1) % m) != ' ') {
--cur;
}
}
}
return cur / m;
}
}
class Solution {
public:
int wordsTyping(vector<string>& sentence, int rows, int cols) {
string s;
for (auto& t : sentence) {
s += t;
s += " ";
}
int m = s.size();
int cur = 0;
while (rows--) {
cur += cols;
if (s[cur % m] == ' ') {
++cur;
} else {
while (cur && s[(cur - 1) % m] != ' ') {
--cur;
}
}
}
return cur / m;
}
};
func wordsTyping(sentence []string, rows int, cols int) int {
s := strings.Join(sentence, " ") + " "
m := len(s)
cur := 0
for i := 0; i < rows; i++ {
cur += cols
if s[cur%m] == ' ' {
cur++
} else {
for cur > 0 && s[(cur-1)%m] != ' ' {
cur--
}
}
}
return cur / m
}
function wordsTyping(sentence: string[], rows: number, cols: number): number {
const s = sentence.join(' ') + ' ';
let cur = 0;
const m = s.length;
for (let i = 0; i < rows; ++i) {
cur += cols;
if (s[cur % m] === ' ') {
++cur;
} else {
while (cur > 0 && s[(cur - 1) % m] !== ' ') {
--cur;
}
}
}
return Math.floor(cur / m);
}