First we build an array, which represents how many words we can put in a line for each word if that word is the 1st in the line (i.e. length[i] represents the number of words we can put in a line if sentence[i] is the leading word).
After that, we continuously put words in each line, according to the total number of words we put currently, we can know what's the leading word in the next line. Then it is easy to compute the number of sentence we can fit.
def wordsTyping(self, sentence, rows, cols): n = len(sentence) length = *n for i in range(n): j = i #sentence[i] is the leading word in this line cur = 0 #number of words we can fit in this line curlen = 0 #number of columns we use in the current line while (curlen+len(sentence[j]))<=cols: cur += 1 curlen += len(sentence[j])+1 j = (j+1)%n #next word we need to fit length[i] = cur start = 0 #the leading word in each line total = 0 #total number of words we have fit for i in range(rows): total += length[start] start = total % n return total/n