Java C++算法题解leetcode1592重新排列单词间的空格

yizhihongxing

首先,我们需要明确题目的要求:将字符串中单词之间的空格重新排列,使得单词之间只有一个空格,同时字符串的首尾不含空格。

其次,我们需要分析和解决这个问题。首先,我们需要将原字符串按照空格分割成单词,然后将单词之间的空格删除或替换成一个空格,最后将字符串首尾空格删除即可。

以下是具体的代码解决方案:

public String reorderSpaces(String text) {
    // 统计空格的个数
    int spaceCount = 0;
    for (char c : text.toCharArray()) {
        if (c == ' ') {
            spaceCount++;
        }
    }

    String[] words = text.trim().split("\\s+"); // 按照空格分割字符串并去除开头和结尾的空格
    if (words.length == 1) { // 如果只有一个单词,则空格全部在结尾
        return words[0] + " ".repeat(spaceCount);
    }

    int spaceBetweenWords = spaceCount / (words.length - 1);
    int spaceAtTheEnd = spaceCount % (words.length - 1);
    String spaceBetweenWordsStr = " ".repeat(spaceBetweenWords);

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < words.length - 1; i++) { // 处理单词之间的空格
        sb.append(words[i]).append(spaceBetweenWordsStr);
    }
    sb.append(words[words.length - 1]); // 处理最后一个单词
    sb.append(" ".repeat(spaceAtTheEnd)); // 处理结尾的空格

    return sb.toString();
}

我们可以用以下两个示例来验证代码:

示例一:

输入:text = "  this   is  a sentence "
输出:"this is a sentence"
解释:原字符串中含有4个空格,将它们以"this", "is", "a", "sentence"为单词分组,单词之间只有一个空格,首尾没有空格。

示例二:

输入:text = " practice   makes   perfect"
输出:"practice makes perfect "
解释:原字符串中含有5个空格,将它们以"practice", "makes", "perfect"为单词分组,单词之间只有一个空格,尾部含有1个空格,首尾没有空格。

通过以上两个示例的验证,我们可以判断该算法的答案是正确的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java C++算法题解leetcode1592重新排列单词间的空格 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 浅谈jsp中的9个隐含对象

    接下来我将为大家详细讲解“浅谈JSP中的9个隐含对象”的完整攻略。 1. JSP的9个隐含对象 在JSP页面中,有9个隐含对象,他们分别是: request:表示客户端发来的请求,被封装成了request对象,在JSP页面中可以通过request对象访问请求中的参数信息。 response:表示服务器对请求做出的响应,被封装成了response对象,在JSP…

    Java 2023年6月15日
    00
  • Win7系统脚步设置出现问题导致网页内容无法复制的解决方法

    当Win7系统脚步设置出现问题时,会导致网页内容无法复制或复制后格式混乱的情况。以下是解决此问题的步骤: 步骤一:检查剪贴板服务是否开启 按下’Win+R’键,输入’services.msc’,回车进入服务管理器界面。 在该界面中找到“剪贴板服务”并右键点击。选择属性,检查该服务是否已开启。 若该服务未开启,点击’启动’即可。 步骤二:清空剪贴板缓存 按下’…

    Java 2023年5月30日
    00
  • Spring Bean注册与注入实现方法详解

    Spring Bean注册与注入实现方法详解 Spring是一个非常流行的Java开发框架,它提供了很多便捷的功能,其中之一就是Bean注册与注入。本文将详细讲解Spring Bean注册与注入的实现方法,包括XML配置、注解配置和Java配置三种方式,并提供两个示例说明。 XML配置 XML配置是Spring最早的配置方式,也是最基础的配置方式。在XML配…

    Java 2023年5月18日
    00
  • Java实现深度优先搜索(DFS)和广度优先搜索(BFS)算法

    Java实现深度优先搜索(DFS)和广度优先搜索(BFS)算法 深度优先搜索(DFS)和广度优先搜索(BFS)算法是常用的遍历和搜索算法,具有很高的实用价值。在Java中,我们可以通过使用递归函数和队列这两种数据结构来实现这两种算法。下面将对这两种算法进行详细的讲解。 深度优先搜索(DFS) 深度优先搜索(DFS)是一种常用的遍历算法,其思想就是从起点开始,…

    Java 2023年5月19日
    00
  • Java中让界面内的时间及时更新示例代码

    下面我来详细讲解一下“Java中让界面内的时间及时更新”的完整攻略,具体步骤如下: 1. 确定界面组件 首先需要确定要更新时间的界面组件,可以是JLabel、JTextField、JTextPane等。通常情况下,我们会选用JLabel组件来显示时间。 2. 创建时间更新线程 由于时间是需要不断更新的,所以我们需要创建一个线程来负责更新时间。这个线程可以用J…

    Java 2023年5月20日
    00
  • 图文详解JAVA实现快速排序

    图文详解JAVA实现快速排序 前言 快速排序(Quicksort)是一种常用的排序算法,通过将原数列分为两部分来实现排序。它的时间复杂度为O(nlogn),效率比较高,被广泛应用。 准备工作 在开始之前,我们需要准备一个Java IDE,本文使用的是Eclipse。另外,需要具备Java基础语法的基础知识,如基本数据类型、数组和循环等。 算法流程 快速排序的…

    Java 2023年5月19日
    00
  • 基于springBoot配置文件properties和yml中数组的写法

    以下是基于springBoot配置文件properties和yml中数组的写法的完整攻略: 配置文件格式 在Spring Boot中,可以使用.properties或.yml格式的配置文件,其中.yml格式相较于.properties更为简洁直观。 .properties格式 .properties格式中数组的写法可以使用以下方式: my.array[0]=…

    Java 2023年5月23日
    00
  • Java中的Checked异常有哪些?

    Java中的Checked异常 在Java程序设计中,异常是无法避免的,可能是程序中的代码出现了错误,也可能是其他外部因素造成的异常。其实,Java中的异常分为两类:Checked异常和Unchecked异常。其中,Checked异常必须在代码中进行处理,否则程序无法编译通过。在本篇攻略中,我们来详细讲解Java中的Checked异常。 Checked异常的…

    Java 2023年4月28日
    00
合作推广
合作推广
分享本页
返回顶部