5519. Reorganizar los espacios entre palabras-método de doble bucle

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
  • textLetras minúsculas y ' 'maquillaje
  • text 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));
		
	}
    
}

Supongo que te gusta

Origin blog.csdn.net/e891377/article/details/108692264
Recomendado
Clasificación