算法编程(二十八):重新排列单词间的空格

166 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

写在前面

今天的这道题,《重新排列单词间的空格》主要考察对字符串拆分再合并的知识点。

很有意思的一道题,下面一起来看一下吧。

image.png

题目解读

根据题目的描述来看,是要在一个字符串text中,将其中的空格均匀分布。

题目的描述很长,但是其实就是如此简单的一个需求。

当然其中包括空格不会均匀的情况,这个时候就把多余的空格放在字符串末尾就可以了。

解题思路也很简单,就两个点,先将单词和空格进行分离操作,然后再将两者按照规范进行组装。

下面来看一下具体的代码编写吧。

代码实现

本次执行代码如下所示,大家可以自行试一下。

public class Solution {

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.reorderSpaces("  this   is  a sentence "));
    }

    public String reorderSpaces(String text) {
        List<String> list = new ArrayList<>();
        int konggeCount = 0;
        String[] strings = text.split("");
        for (String string : strings){
            if(" ".equals(string)){
                konggeCount++;
            }
        }
        String[] dc = text.split(" ");
        for (String string : dc){
            if(!"".equals(string)){
                list.add(string);
            }
        }
        if(list.size() == 1 && konggeCount == 0){
            return list.get(0);
        }
        if(list.size() == 1){
            return list.get(0) + zh(konggeCount);
        }
        int sp = konggeCount / (list.size() - 1);
        int footer = konggeCount % (list.size() - 1);
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            if(i == list.size() - 1){
                stringBuilder.append(list.get(i)).append(zh(footer));
            }else{
                stringBuilder.append(list.get(i)).append(zh(sp));
            }
        }
        return stringBuilder.toString();
    }

    public String zh(int length){
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < length; i++) {
            stringBuilder.append(" ");
        }
        return stringBuilder.toString();
    }
}

代码执行结果

今天的执行结果就不行了,速度和内存消耗都很高,看来这个方式还是不太行。

image.png

其他思路

这道题目前题解比较少,其他思路的话只能大家自己去发现了。

总结

本道题在于字符串中单词和空格的分离后的组装,想要提高效率就要在分离和组装的时候下功夫,简单的暴力解决也是可以解出这道题的。