LeetCode1592 :Java
给你一个字符串 text ,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。题目测试用例保证 text 至少包含一个单词 。
请你重新排列空格,使每对相邻单词之间的空格数目都 相等 ,并尽可能 最大化 该数目。如果不能重新平均分配所有空格,请 将多余的空格放置在字符串末尾 ,这也意味着返回的字符串应当与原 text 字符串的长度相等。
返回 重新排列空格后的字符串 。
package com.nowcoder.community.java_test;
import org.apache.commons.lang3.builder.ToStringExclude;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.nextLine();
String b = reorderSpaces(a);
System.out.println(b);
}
public static String reorderSpaces(String text) {
//创建字符串b,忽略字符串text首部和尾部的空格;
String b = text.trim();
//统计字符串中字母的数量
int numsZ = 0;
// \\s+将字符串按空格分离开来,存储到数组中
String[] words = b.split("\\s+");
for (int i = 0; i < words.length; i++) {
numsZ += words[i].length();
}
//总的空格数量
int numsG = text.length() - numsZ;
//每个单词后应该跟多少个字符串 注意分母不能为0
int ff = 0;
if(words.length-1 != 0){
ff = numsG / (words.length-1);
}
//剩余的空格数量,最后添加在字符串结尾
int gg = numsG - ((words.length-1) * ff);
//定义第一个字符串
String hh = words[0];
for (int i = 1; i < words.length; i++) {
for (int j = 0; j < ff; j++) {
hh += " ";
}
hh += words[i];
}
//多余的空格添加到字符串最后
for (int k = 0; k < gg; k++) {
hh += " ";
}
return hh;
}
}
方法二,利用text.charAt求出空格,空格的重复添加使用repeat即可,内存占有减少。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.nextLine();
String b = reorderSpaces(a);
System.out.println(b);
}
public static String reorderSpaces(String text) {
//创建字符串b,忽略字符串text首部和尾部的空格;
String b = text.trim();
//统计字符串中空格的数量
int numsZ = 0;
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) == ' ') {
numsZ++;
}
}
// \\s+将字符串按空格分离开来,存储到数组中
String[] words = b.split("\\s+");
//每个单词后应该跟多少个字符串 注意分母不能为0
int ff = 0;
if (words.length - 1 != 0) {
ff = numsZ / (words.length - 1);
}
//剩余的空格数量,最后添加在字符串结尾
int gg = numsZ - ((words.length - 1) * ff);
//定义第一个字符串
String hh = words[0];
for (int i = 1; i < words.length; i++) {
hh += " ".repeat(ff);
hh += words[i];
}
//多余的空格添加到字符串最后
hh += " ".repeat(gg);
return hh;
}
}