418. Sentence Screen Fitting

Given a rows x cols screen and a sentence represented by a list of 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 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.
分析:
 1 public class Solution {
 2     // public int wordsTyping(String[] sentence, int rows, int cols) {
 3     //     String s = String.join("_", sentence) + "_";
 4     //     int len = s.length();
 5     //     int count = 0;
 6     //     int[] map = new int[len];
 7     //     for (int i = 1; i < len; ++i) {
 8     //         // if charAt(i) == '_', which means we saved an extra space
 9     //         map[i] = s.charAt(i) == '_' ? 1 : map[i-1] - 1;
10     //     }
11     //     for (int i = 0; i < rows; ++i) {
12     //         count += cols;
13     //         count += map[count % len];
14     //     }
15     //     return count / len;
16     // }
17     public int wordsTyping(String[] sentence, int rows, int cols) {
18         String s = String.join(" ", sentence) + " ";
19         int count = 0;
20         int length = s.length();
21         for (int i = 0; i < rows; i++) {
22             count += cols;
23             if (s.charAt(count % length) == ' ') {
24                 count++;
25             } else {
26                 while (count >= 0 && s.charAt(count % length) != ' ') {
27                     count--;
28                 }
29                 count++;
30             }
31         }
32         return count / length;
33     }
34 }

 

 

posted @ 2019-07-18 12:58  北叶青藤  阅读(220)  评论(0)    收藏  举报