# 418     Sentence Screen Fitting

## 418. [Sentence Screen Fitting](https://leetcode.com/problems/sentence-screen-fitting/description/)

## 1. Question

Given a`rows x cols`screen 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

```java
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)
