题目地址:
https://leetcode.com/problems/rearrange-spaces-between-words/
给定一个字符串 s s s,是由单词和空格组成,要求返回一个新字符串,在总空格数不变的情况下,使得每两个单词之间的空格数尽可能平均并且最大。如果有过剩的空格则放在末尾。
代码如下:
import java.util.ArrayList;
import java.util.List;
public class Solution {
public String reorderSpaces(String text) {
List<String> list = new ArrayList<>();
int cntW = 0, cntS = 0;
for (int i = 0; i < text.length(); i++) {
int j = i;
if (text.charAt(j) != ' ') {
while (j < text.length() && text.charAt(j) != ' ') {
j++;
}
list.add(text.substring(i, j));
cntW++;
} else {
while (j < text.length() && text.charAt(j) == ' ') {
j++;
cntS++;
}
}
i = j - 1;
}
StringBuilder sb = new StringBuilder();
if (cntW == 1) {
sb.append(list.get(0)).append(" ".repeat(cntS));
return sb.toString();
}
int len = cntS / (cntW - 1);
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i));
if (i != list.size() - 1) {
sb.append(" ".repeat(len));
}
}
sb.append(" ".repeat(cntS % (cntW - 1)));
return sb.toString();
}
}
时空复杂度 O ( l s ) O(l_s) O(ls)。