1592. Rearrange Spaces Between Words
Last updated
Was this helpful?
Last updated
Was this helpful?
needs to be careful about the only one word case, words.size()-1 would cause divide by zero
// 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
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
*/