418. Sentence Screen Fitting

Solution:

思路:
思路是用start变量来记录下能装下的句子的总长度,最后除以一个句子的长度,就可以得到个数。
实现:
而句子的总长度的求法时要在每个单词后面加上一个空格(包括最后一个单词).我们遍历屏幕的每一行,然后每次start都加上宽度,然后看all[start%len]是否为空格,是的话就start加1,这样做的好处是可以处理末尾是没有空格的情况,比如宽度为1,只有一个单词a,那么我们都知道是这样放的 a ,start变为1,len是2,all[start%len]是空格,所以start自增1,变成2,这样我们用start/len就知道能放下几个了。
对于all[start%len]不为空格的情况,如果all[(start-1)%len]也不为空格,那么start就自减1,进行while循环,直至其为空格为止

Time Complexity: O(N) Space Complexity: O(N)

Solution Code:

public class Solution {
    public int wordsTyping(String[] sentence, int rows, int cols) {
        String s = String.join(" ", sentence) + " "; //而句子的总长度的求法时要在每个单词后面加上一个空格(包括最后一个单词)
        int start = 0; // start变量来记录下能装下的句子的总长度
        int l = s.length(); // 一个句子的长度
        
        for (int i = 0; i < rows; i++) { // 我们遍历屏幕的每一行
            start += cols; // 每次start都加上宽度
            if (s.charAt(start % l) == ' ') { // 正好能装下,可以处理末尾是没有空格的情况,相当于白加空格1个
                start++;
            } else { 
                while (start > 0 && s.charAt((start-1) % l) != ' ') { // 装不下,减小start循坏再试
                    start--;
                }
            }
        }
        
        return start / l;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容