首先,我们需要明确题目的要求:将字符串中单词之间的空格重新排列,使得单词之间只有一个空格,同时字符串的首尾不含空格。
其次,我们需要分析和解决这个问题。首先,我们需要将原字符串按照空格分割成单词,然后将单词之间的空格删除或替换成一个空格,最后将字符串首尾空格删除即可。
以下是具体的代码解决方案:
public String reorderSpaces(String text) {
// 统计空格的个数
int spaceCount = 0;
for (char c : text.toCharArray()) {
if (c == ' ') {
spaceCount++;
}
}
String[] words = text.trim().split("\\s+"); // 按照空格分割字符串并去除开头和结尾的空格
if (words.length == 1) { // 如果只有一个单词,则空格全部在结尾
return words[0] + " ".repeat(spaceCount);
}
int spaceBetweenWords = spaceCount / (words.length - 1);
int spaceAtTheEnd = spaceCount % (words.length - 1);
String spaceBetweenWordsStr = " ".repeat(spaceBetweenWords);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < words.length - 1; i++) { // 处理单词之间的空格
sb.append(words[i]).append(spaceBetweenWordsStr);
}
sb.append(words[words.length - 1]); // 处理最后一个单词
sb.append(" ".repeat(spaceAtTheEnd)); // 处理结尾的空格
return sb.toString();
}
我们可以用以下两个示例来验证代码:
示例一:
输入:text = " this is a sentence "
输出:"this is a sentence"
解释:原字符串中含有4个空格,将它们以"this", "is", "a", "sentence"为单词分组,单词之间只有一个空格,首尾没有空格。
示例二:
输入:text = " practice makes perfect"
输出:"practice makes perfect "
解释:原字符串中含有5个空格,将它们以"practice", "makes", "perfect"为单词分组,单词之间只有一个空格,尾部含有1个空格,首尾没有空格。
通过以上两个示例的验证,我们可以判断该算法的答案是正确的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java C++算法题解leetcode1592重新排列单词间的空格 - Python技术站