给你一个字符串 text ,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。题目测试用例保证 text 至少包含一个单词 。
请你重新排列空格,使每对相邻单词之间的空格数目都 相等 ,并尽可能 最大化 该数目。如果不能重新平均分配所有空格,请 将多余的空格放置在字符串末尾 ,这也意味着返回的字符串应当与原 text 字符串的长度相等。
返回 重新排列空格后的字符串
class Solution {
public String reorderSpaces(String text) {
if (text.length() <= 1) return text;
char[] ch = text.toCharArray();
int wordCount = 0; //单词数
int spaceCount = 0; //空格数
for (int i = 0; i < ch.length; i++) {
//空格数加1
if (ch[i] == ' ') spaceCount++;
//单词数加1
else if ((i == 0 || ch[i-1] == ' ') && ch[i] != ' ') wordCount++;
}
StringBuilder sb = new StringBuilder();
//间隔加的空格数
int num = wordCount == 1 ? spaceCount : spaceCount / (wordCount - 1);
//遍历数组,进行拼接
for (int i = 0; i < ch.length; i++) {
//如果是空格,并且sb为空,进入下个循环
if (sb.length() == 0 && ch[i] == ' ') continue;
//不是空格就插入,插入单词字符
if (ch[i] != ' ') sb.append(ch[i]);
//如果单词插入完毕,进行循环拼接,num个空格
else if (ch[i] == ' ' && ch[i-1] != ' ')
for (int j = 0; j < num; j++) sb.append(' ');
}
//补空格
while (sb.length() < text.length()) sb.append(' ');
//因为for循环里,每次增加单词后,都会加空格,最后一个单词后也加了,所以会多出num个空格
if (sb.length()>text.length()) sb.delete(text.length(), sb.length());
return sb.toString();
}
}
因为边界处理得不好,卡壳了,所以逛了题解区,思路和maxatom
写的题解代码类似,参照这做出来。