LeetCode #418 - Sentence Screen Fitting

题目描述:

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.

class Solution {
public:
    int wordsTyping(vector<string>& sentence, int rows, int cols) {
        int n=sentence.size();
        int total_len=0;
        for(string word:sentence) total_len+=word.size()+1;
        int count=0;
        int row=0;
        int i=0;
        int remainNum=cols; //表示当前行还剩多少个字符
        while(row<rows)
        {
            if(remainNum>=sentence[i].size())
            {
                remainNum-=sentence[i].size(); 
                if(remainNum>0) remainNum--; //如果还有字符剩余,就要添加单词后面的空格
                if(i==n-1) //说明要重新遍历一次sentence
                { // 如果存在cols很大的情况,直接可以将整个sentence的words都放进来
                    i=0;
                    count++;
                    count+=remainNum/total_len; // 可以放进的sentence数
                    remainNum%=total_len;
                }
                else i++;
            }
            else //开始新的一行
            {
                remainNum=cols;
                row++;
            }
        }
        return count;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值