# 418 Sentence Screen Fitting



T: O(rows\*max of word length)

S: O(all words total length)

```java
class Solution {
    public int wordsTyping(String[] sentence, int rows, int cols) {
        StringBuilder sb = new StringBuilder();
        for (String s : sentence) {
            sb.append(s + " ");
        }
        String s = sb.toString();
        int len = s.length();
        
        int cursor = 0;
        for (int i = 0; i < rows; i++) {
            cursor += cols;
            
            if (s.charAt(cursor%len) == ' ') {
                cursor++;
            } else {
                while (cursor >= 0 && s.charAt(cursor%len) != ' ') {
                    cursor--;
                }
                cursor++;
            }
        }
        return cursor/len;
    }
}
```



## more concise version

```java
class Solution {
    public int wordsTyping(String[] sentence, int rows, int cols) {
        StringBuilder sb = new StringBuilder();
        for (String s : sentence) {
            // if (s.length() > cols) { // notice this case, so if we only make idx min is 0 (idx >= 0)
            //     return 0;
            // }
            sb.append(s + " ");
        }
        String sentenceStr = sb.toString();
        int len = sentenceStr.length();
        
        int idx = 0;
        for (int i = 0; i < rows; i++) {
            idx += cols;
            while (idx >= 0 && sentenceStr.charAt(idx%len) != ' ') { // make idx min is 0, in the last idx/len = 0
                idx--;
            }
            idx++;
        }
        return idx/len;
    }
}
```



#### 最簡潔的寫法,  use String.join(" ", str)

```java
class Solution {
    public int wordsTyping(String[] sentence, int rows, int cols) {
        String s = String.join(" ", sentence) + " ";
        int len = s.length();
        
        int idx = 0;
        for (int i = 0; i < rows; i++) {
            idx += cols;
            while (idx >= 0 && s.charAt(idx%len) != ' ') { // make idx min is 0, in the last idx/len = 0
                idx--;
            }
            idx++;
        }
        return idx/len;
    }
}
```



這題的這個寫法的想法, 相當 tricky

ex:&#x20;

Input: sentence = \["a", "bcd", "e"], rows = 3, cols = 6

概念轉換成像是在一個無窮的多個 sentence 組成的長 sentences 上以 row 的長度來做斷句



<figure><img src="https://4272748102-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LekNH5IywF8mjBxFcnu%2Fuploads%2FKNIPwbmY49G5BdK1BjMl%2Fimage.png?alt=media&#x26;token=a3ca74b8-e488-4608-b153-f1592819a84c" alt=""><figcaption></figcaption></figure>









