> For the complete documentation index, see [llms.txt](https://timmybeeflin.gitbook.io/cracking-leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://timmybeeflin.gitbook.io/cracking-leetcode/string/1592.-rearrange-spaces-between-words.md).

# 1592. Rearrange Spaces Between Words

![](/files/-MlSnm1eV4aWoPv4bqb4)

![](/files/-MlSnpNn-zX3whf_XtTH)

needs to be careful about the only **one word case, words.size()-1 would cause  divide by zero**

```java
// cal newSpace length, left space length, be careful about 1 
        int newSpace = space;
        int leftSpace = space;
        if (words.size() != 1) {
            newSpace = space/(words.size()-1);
            leftSpace = space%(words.size()-1);
        }
```

time: O(n)

space: O(n), result of text

```java
class Solution {
    public String reorderSpaces(String text) {
        int space = 0;
        int wordCount = 0;
        int totalLen = text.length();
        List<String> words = new ArrayList<>();
        
        
        int i = 0;
        while (i < totalLen) {
            // cal space count
            if (text.charAt(i) == ' ') { 
                space++;
                i++;
            } else { // record words
                int start = i;
                while(i < text.length() && text.charAt(i) != ' ') {
                    i++;
                }
                int end = i;
                words.add(text.substring(start, end));
            }
        }

        // cal newSpace length, left space length, be careful about 1 
        int newSpace = space;
        int leftSpace = space;
        if (words.size() != 1) {
            newSpace = space/(words.size()-1);
            leftSpace = space%(words.size()-1);
        }
        
        // build new space empty string
        StringBuilder newSpaceStr = new StringBuilder();
        for (int left = 0; left < newSpace; left++) {
            newSpaceStr.append(" ");
        }
        
        // compose new text
        StringBuilder result = new StringBuilder();
        for (int w = 0; w < words.size(); w++) {
            String word = words.get(w);
            result.append(word);
            if (w != words.size()-1) {
                result.append(newSpaceStr.toString());
            }
        }

        // add left space
        for (int left = 0; left < leftSpace; left++) {
            result.append(" ");
        }
        return result.toString();
    }
}
/*
count space
count word count
space/word count-1 = new space
space - new space
space - new space
left put in the tail
*/
```
