Sentence Screen Fitting

旧城等待, 2021-11-22 15:58 323阅读 0赞

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:

  1. Input:
  2. rows = 2, cols = 8, sentence = ["hello", "world"]
  3. Output:
  4. 1
  5. Explanation:
  6. hello---
  7. world---
  8. The character '-' signifies an empty space on the screen.

Example 2:

  1. Input:
  2. rows = 3, cols = 6, sentence = ["a", "bcd", "e"]
  3. Output:
  4. 2
  5. Explanation:
  6. a-bcd-
  7. e-a---
  8. bcd-e-
  9. The character '-' signifies an empty space on the screen.

Example 3:

  1. Input:
  2. rows = 4, cols = 5, sentence = ["I", "had", "apple", "pie"]
  3. Output:
  4. 1
  5. Explanation:
  6. I-had
  7. apple
  8. pie-I
  9. had--
  10. The character '-' signifies an empty space on the screen.
  11. 分析:

统计加空格的句子总长度,然后遍历每一行,初始化colsRemaining为cols,然后还需要一个变量idx,来记录当前单词的位置,如果colsRemaining大于0,就进行while循环,如果当前单词的长度小于等于colsRemaining,说明可以放下该单词,那么就减去该单词的长度就是剩余的空间,然后如果此时colsRemaining仍然大于0,则减去空格的长度1,然后idx自增1,如果idx此时超过单词个数的范围了,说明一整句可以放下,那么就有可能出现宽度远大于句子长度的情况,所以我们加上之前放好的一句之外,还要加上colsRemaining/len的个数,然后colsRemaining%len是剩余的位置,此时idx重置为0.

  1. 1 class Solution {
  2. 2 int wordsTyping(String[] sentence, int rows, int cols) {
  3. 3 String all = "";
  4. 4 for (String word : sentence) {
  5. 5 all += (word + " ");
  6. 6 }
  7. 7 int res = 0, idx = 0, n = sentence.length, len = all.length();
  8. 8 for (int i = 0; i < rows; ++i) {
  9. 9 int colsRemaining = cols;
  10. 10 while (colsRemaining > 0) {
  11. 11 if (sentence[idx].length() <= colsRemaining) {
  12. 12 colsRemaining -= sentence[idx].length();
  13. 13 if (colsRemaining > 0) {
  14. 14 colsRemaining -= 1;
  15. 15 }
  16. 16 if (++idx >= n) {
  17. 17 res += (1 + colsRemaining / len);
  18. 18 colsRemaining %= len;
  19. 19 idx = 0;
  20. 20 }
  21. 21 } else {
  22. 22 break;
  23. 23 }
  24. 24 }
  25. 25 }
  26. 26 return res;
  27. 27 }
  28. 28 }

转载于:https://www.cnblogs.com/beiyeqingteng/p/11206611.html

发表评论

表情:
评论列表 (有 0 条评论,323人围观)

还没有评论,来说两句吧...

相关阅读