【Leetcode】1592. Rearrange Spaces Between Words

题目地址:

https://leetcode.com/problems/rearrange-spaces-between-words/

给定一个字符串 s s s,是由单词和空格组成,要求返回一个新字符串,在总空格数不变的情况下,使得每两个单词之间的空格数尽可能平均并且最大。如果有过剩的空格则放在末尾。

代码如下:

import java.util.ArrayList;
import java.util.List;

public class Solution {
    public String reorderSpaces(String text) {
        List<String> list = new ArrayList<>();
        int cntW = 0, cntS = 0;
        for (int i = 0; i < text.length(); i++) {
            int j = i;
            if (text.charAt(j) != ' ') {
                while (j < text.length() && text.charAt(j) != ' ') {
                    j++;
                }
                list.add(text.substring(i, j));
                cntW++;
            } else {
                while (j < text.length() && text.charAt(j) == ' ') {
                    j++;
                    cntS++;
                }
            }
            
            i = j - 1;
        }
        
        StringBuilder sb = new StringBuilder();
        if (cntW == 1) {
            sb.append(list.get(0)).append(" ".repeat(cntS));
            return sb.toString();
        }
        
        int len = cntS / (cntW - 1);
        for (int i = 0; i < list.size(); i++) {
            sb.append(list.get(i));
            if (i != list.size() - 1) {
                sb.append(" ".repeat(len));
            }
        }
        
        sb.append(" ".repeat(cntS % (cntW - 1)));
        return sb.toString();
    }
}

时空复杂度 O ( l s ) O(l_s) O(ls)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值