418 Sentence Screen Fitting

1. Question

Given arows x colsscreen and a sentence represented by a list of non-empty words, find how many times the given sentence can be fitted on the screen.

Note:

  1. A word cannot be split into two lines.

  2. The order of words in the sentence must remain unchanged.

  3. Two consecutive words in a line must be separated by a single space.

  4. Total words in the sentence won't exceed 100.

  5. Length of each word is greater than 0 and won't exceed 10.

  6. 1 ≤ rows, cols ≤ 20,000.

Example 1:

Input: rows = 2, cols = 8, sentence = ["hello", "world"]

Output: 1

Explanation:
hello---
world---

The character '-' signifies an empty space on the screen.

Example 2:

Input: rows = 3, cols = 6, sentence = ["a", "bcd", "e"]

Output: 2


Explanation:
a-bcd- 
e-a---
bcd-e-

The character '-' signifies an empty space on the screen.

Example 3:

Input: rows = 4, cols = 5, sentence = ["I", "had", "apple", "pie"]

Output: 1


Explanation:
I-had
apple
pie-I
had--

The character '-' signifies an empty space on the screen.

2. Implementation

思路: 这道题是给定一个每个单词以空格隔开的句子,要求用多少这个句子才能完全fit上 row * col的screen, 一个单词不能分布在不同的两行。所以我们先得到这个句子用空格隔开后的长度len,然后用start这个变量判断每行最后一个空格在哪,最后的结果就是start / len

class Solution {
    public int wordsTyping(String[] sentence, int rows, int cols) {
        String s = "";

        for (String word : sentence) {
            s += word + " ";
        }

        int len = s.length();
        int start = 0;

        for (int i = 0; i < rows; i++) {
            start += cols;
            if (s.charAt(start % len) == ' ') {
                ++start;
            }
            else {
                while (start > 0 && s.charAt((start - 1) % len) != ' ') {
                    --start;
                }
            }
        }
        return start / len;
    }
}

3. Time & Space Complexity

时间复杂度O(n), 空间复杂度O(n)

Last updated