LeetCode每日一题——1592. 重新排列单词间的空格

简介: 给你一个字符串 text ,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。题目测试用例保证 text 至少包含一个单词 。

题目

给你一个字符串 text ,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。题目测试用例保证 text 至少包含一个单词 。

请你重新排列空格,使每对相邻单词之间的空格数目都 相等 ,并尽可能 最大化 该数目。如果不能重新平均分配所有空格,请 将多余的空格放置在字符串末尾 ,这也意味着返回的字符串应当与原 text 字符串的长度相等。

返回 重新排列空格后的字符串 。

示例

示例 1:

输入:text = " this is a sentence "

输出:“this is a sentence”

解释:总共有 9 个空格和 4 个单词。可以将 9 个空格平均分配到相邻单词之间,相邻单词间空格数为:9 / (4-1) = 3 个。

示例 2:

输入:text = " practice makes perfect"

输出:"practice makes perfect“

解释:总共有 7 个空格和 3 个单词。7 / (3-1) = 3 个空格加上 1 个多余的空格。多余的空格需要放在字符串的末尾。

示例 3:

输入:text = “hello world”

0-输出:“hello world”

示例 4:

输入:text = " walks udp package into bar a"

输出:"walks udp package into bar a "

示例 5:

输入:text = “a”

输出:“a”

提示:

1 <= text.length <= 100

text 由小写英文字母和 ’ ’ 组成

text 中至少包含一个单词

思路

简单题简单做

1.先遍历一遍给定字符串,计算空格的个数,以及收集所有单词

2.计算每个单词之间的空格数量以及需要放在最后的空格数量(使用空格数量 整除 单词数量 - 1即可求出间隔的空格,使用单词数量对单词数量 - 1 取余即可求出末尾空格数量)

3.将第二步的空格分布与所收集的单词拼接在一起即可

4.这里注意单词只有一个的情况需要单独处理,直接返回这个单词 + 空格总量即可。

题解

class Solution:
    def reorderSpaces(self, text: str) -> str:
        tmp, res,s = [], 0, ''
        for i in range(len(text)):
            if text[i] == ' ':
                res += 1
                if s != '':
                    tmp.append(s)
                    s = ''
            else:
                s += text[i]
                if i == len(text) - 1:
                    tmp.append(s)
        if len(tmp) == 1:
            return tmp[0] + ' ' * res
        ans = ''
        # 单词间的空格数
        res1 = res // (len(tmp) - 1)
        # 末尾的空格数
        res2 = res % (len(tmp) - 1)
        # 拼接字符串
        for i in range(len(tmp)-1):
            ans += tmp[i]
            ans += ' '*res1
        ans += tmp[-1]
        ans += ' '*res2
        return ans
目录
相关文章
|
1月前
|
算法
LeetCode第58题最后一个单词的长度
LeetCode第58题"最后一个单词的长度"的解题方法,通过从字符串末尾向前遍历并计数非空格字符,直接得出最后一个单词的长度。
LeetCode第58题最后一个单词的长度
|
1月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
21 4
|
1月前
|
Python
【Leetcode刷题Python】生词本单词整理
文章提供了一个Python程序,用于帮助用户整理和排版生词本上的单词,包括去除重复单词、按字典序排序,并按照特定的格式要求进行打印排版。
21 3
|
1月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
43 0
|
1月前
|
Python
【Leetcode刷题Python】318. 最大单词长度乘积
本文提供了LeetCode题目318的Python编程解决方案,题目要求在一个字符串数组中找出两个不含有公共字母的单词,且这两个单词的长度乘积最大,如果不存在这样的两个单词,则返回0。
12 0
|
3月前
|
算法 测试技术 索引
力扣经典150题第三十二题:串联所有单词的子串
力扣经典150题第三十二题:串联所有单词的子串
17 0
|
3月前
|
算法
力扣经典150题第二十一题:反转字符串中的单词
力扣经典150题第二十一题:反转字符串中的单词
30 0
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
39 6
|
1月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
68 2
|
1月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
34 7