Leetcode # 418. Sentence Screen Fitting
- 2023.07.21
- LeetCode
https://leetcode.com/problems/sentence-screen-fitting
Solution
Time Complexity: O(rows * cols)
Space Complexity: O(1)
(The input and output generally do not count towards the space complexity.)
class Solution: def wordsTyping(self, sentence: List[str], rows: int, cols: int) -> int: i = j = p = times = 0 full_len = sum([len(w) for w in sentence]) + len(sentence) - 1 record = { 0:[0, 0] } while i < rows: if times > 0 and p in record: t = (rows - i) // (i - record[p][0]) times += (times - record[p][1]) * t i += (i - record[p][0]) * t if i >= rows: break record[p] = [i, times] if p == 0 and j + full_len <= cols: t = (cols - j + 1) // (full_len + 1) times += t j += t * (full_len + 1) while j + len(sentence[p]) <= cols: # line += sentence[p] + " " j += len(sentence[p]) + 1 p += 1 if p == len(sentence): times += 1 p = 0 i += 1 j = 0 return times
注意點
- 注意 sentence 內的單詞間,
用做間隔的空白造成的影響 - 用迴圈去一個一個計算,會造成 Time Limit Exceeded
- 當一個 row 足夠長到讓你可以放入整個 sentence 時
應該省略使用迴圈去一個一個計算 sentence[p] - 當你換行後,發現 sentence 的指標 p 和之前一樣
表示開始重複了,應使用重複的那幾行去填充之後的空間
( record 用以記錄前面每一行起始時的狀態)
- 當一個 row 足夠長到讓你可以放入整個 sentence 時
Last Updated on 2023/08/16 by A1go