5519. Reorganizar los espacios entre palabras
Darle una cadena de texto, que consta de varias palabras rodeadas de espacios. Cada palabra consta de una o más letras minúsculas en inglés y hay al menos un espacio entre las dos palabras. El caso de prueba del tema garantiza que el texto contenga al menos una palabra .
Reorganice su espacio, el número de espacios entre cada par de palabras adyacentes es igual y, en la medida de lo posible, maximice el número. Si no puede redistribuir equitativamente a todos los espacios, se colocarán espacios adicionales al final de la cadena , la cadena también significa que el retorno del texto original debe ser igual a la longitud de la cadena.
Devuelve una cadena reordenada de espacios en blanco .
Ejemplo 1:
输入:text = " this is a sentence "
输出:"this is a sentence"
解释:总共有 9 个空格和 4 个单词。可以将 9 个空格平均分配到相邻单词之间,相邻单词间空格数为:9 / (4-1) = 3 个。
Ejemplo 2:
输入:text = " practice makes perfect"
输出:"practice makes perfect "
解释:总共有 7 个空格和 3 个单词。7 / (3-1) = 3 个空格加上 1 个多余的空格。多余的空格需要放在字符串的末尾。
Ejemplo 3:
输入:text = "hello world"
输出:"hello world"
Ejemplo 4:
输入:text = " walks udp package into bar a"
输出:"walks udp package into bar a "
Ejemplo 5:
输入:text = "a"
输出:"a"
rápido:
1 <= text.length <= 100
text
Letras minúsculas y' '
maquillajetext
Contiene al menos una palabra en
Código
Muy bien escrito. . .
Escanee dos veces y cuente el número de palabras y espacios por primera vez. Encuentra el número promedio de espacios y el número de espacios restantes.
La segunda costura de escaneo.
package weekly_contest_207;
public class Solution {
public String reorderSpaces(String text) {
int words = 0;//单词数量
int space = 0;//空格数量
char[] arr = text.toCharArray();
char c = " ".charAt(0);
//统计空格数量和单词数量
for (int i = 0; i < arr.length;) {
if(arr[i]==c) {
space++;
i++;
}else {
while(i < arr.length && arr[i]!=c) {
i++;
}
words++;
}
}
//单词数量为1时,空格数量为0时,说明都是单词,直接返回就可以了。
if(space==0) {
return text;
}
//单词数量为1时,空格数量不定时,只有前面或者后面有空格
if(0==(words-1)) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=c) {
buf.append(arr[i]);
}
}
for (int i = 0; i < space; i++) {
buf.append(c);
}
return buf.toString();
}
//至少有两个单词的情况
int sp = space/(words-1);//平均空格
int cc = space%(words-1);//剩余空格
int cs = words-1;//单词分隔了多少次
//拼接单词
StringBuffer buf = new StringBuffer();
for (int i = 0; i < arr.length;) {
//是空格,直接就加加跳过去。
if(arr[i]==c) {
i++;
}else {
//是非空格字符,就在while中加加到buf中。
while(i < arr.length && arr[i]!=c) {
buf.append(arr[i]);
i++;
}
//加加完后,判断单词的间隔是否用完,没有用完就加单词之间的空格
if(cs>0) {
for (int j = 0; j < sp; j++) {
buf.append(c);
}
cs--;
}
}
}
//加上后面的剩余空格
if(cc>0) {
for (int i = 0; i < cc; i++) {
buf.append(c);
}
}
return buf.toString();
}
public static void main(String[] args) {
// String str = " this is a sentence ";
String str = " hello";
// String str = "a";
// String str = "o d";
// String str = "e ms pt";
System.out.println(new Solution().reorderSpaces(str));
}
}