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

 更新时间:2022年09月14日 10:28:13   作者:AnjaVon  
这篇文章主要为大家介绍了Java C++算法题解leetcode1592重新排列单词间的空格示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目要求

思路:模拟

  • 模拟就完了
  • 统计空格数量和单词数量,计算单词间应有的空格数,将它们依次放入结果字符串,若有余数则在末尾进行填补。

Java

class Solution {
    public String reorderSpaces(String text) {
        int n = text.length(), spcnt = 0;
        List<String> words = new ArrayList<>();
        for (int i = 0; i < n; ) {
            if (text.charAt(i) == ' ' && ++i >= 0 && ++spcnt >= 0)
                continue;
            int j = i;
            while (j < n && text.charAt(j) != ' ')
                j++;
            words.add(text.substring(i, j)); // 单词
            i = j;
        }
        StringBuilder res = new StringBuilder();
        int m = words.size(), dis = spcnt / Math.max(m - 1, 1);
        String spcs = ""; // 两单词间的空格
        while (dis-- > 0)
            spcs += " ";
        for (int i = 0; i < m; i++) {
            res.append(words.get(i));
            if (i != m - 1)
                res.append(spcs);
        }
        while (res.length() != n)
            res.append(" ");
        return res.toString();
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(n),结果的空间开销

C++

class Solution {
public:
    string reorderSpaces(string text) {
        int n = text.size(), spcnt = 0;
        vector<string> words;
        for (int i = 0; i < n; ) {
            if (text[i] == ' ' && ++i >= 0 && ++spcnt >= 0)
                continue;
            int j = i;
            while (j < n && text[j] != ' ')
                j++;
            words.emplace_back(text.substr(i, j - i)); // 单词
            i = j;
        }
        string res;
        int m = words.size(), dis = spcnt / max(m - 1, 1);
        string spcs = ""; // 两单词之间的空格
        while (dis-- > 0)
            spcs += " ";
        for (int i = 0; i < m; i++) {
            res += words[i];
            if (i != m - 1)
                res += spcs;
        }
        while (res.size() != n)
            res += " ";
        return res;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n),结果的空间开销

Rust

  • rust有很方便的函数用以统计空格和单词,也有很方便的repeat构成单词之间需要的空格。
impl Solution {
    pub fn reorder_spaces(text: String) -> String {
        let spcnt = text.chars().filter(|&c| c == ' ').count();
        let words: Vec<String> = text.split_whitespace().map(|s| s.to_string()).collect();
        let mut res = String::new();
        if words.len() == 1 {
            res.push_str(&words[0]);
            res.push_str(&" ".repeat(spcnt));
            return res
        }     
        for i in 0..words.len() {
            res.push_str(&words[i]);
            res.push_str(&" ".repeat(
                if i < words.len() - 1 {
                    spcnt / (words.len() - 1)
                }
                else {
                    spcnt - spcnt / (words.len() - 1) * (words.len() - 1)
            }));
        }
        res
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(n),结果的空间开销

以上就是Java C++算法题解leetcode1592重新排列单词间的空格的详细内容,更多关于Java C++ 单词间空格重排的资料请关注脚本之家其它相关文章!

相关文章

  • win32使用openfilename浏览文件窗口示例

    win32使用openfilename浏览文件窗口示例

    这篇文章主要介绍了使用win32 API打开浏览文件窗口,使用OPENFILENAME结构体来实现这个功能,需要的朋友可以参考下
    2014-02-02
  • C++ Boost Graph算法超详细精讲

    C++ Boost Graph算法超详细精讲

    这篇文章主要介绍了C++ Boost Graph算法,我门尝试使用Boost.Graph库来运行Goldberg的最大流算法。 Boost.Graph将其称为push_relabel_max_flow
    2022-10-10
  • java 出现NullPointerException的原因及解决办法

    java 出现NullPointerException的原因及解决办法

    这篇文章主要介绍了java 出现NullPointerException的原因及解决办法的相关资料,这里说明出现NullPointerException 的原因的总结,并说明该如何解决,需要的朋友可以参考下
    2017-08-08
  • C++实现LeetCode(206.倒置链表)

    C++实现LeetCode(206.倒置链表)

    这篇文章主要介绍了C++实现LeetCode(206.倒置链表),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现图书管理系统课程设计(面向对象)

    C++实现图书管理系统课程设计(面向对象)

    这篇文章主要为大家详细介绍了C++实现图书管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++与Lua交互内存分配详解

    C++与Lua交互内存分配详解

    C/C++ 与 Lua 的交互是通过 lua_State 这一句柄进行交互,我们常规的创建都是通过 luaL_newstate 这一辅助函数,这篇文章主要给大家详细介绍了C++与Lua交互内存分配,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2023-11-11
  • C++排序算法之冒泡排序解析

    C++排序算法之冒泡排序解析

    这篇文章主要介绍了C++排序算法之冒泡排序解析,从左到右,相邻两数两两比较,若下标小的数大于下标大的数则交换,将最大的数放在数组的最后一位,,再次遍历数组,将第二大的数,放在数组倒数第二的位置,以此类推,直到数组有序需要的朋友可以参考下
    2023-10-10
  • C++基于EasyX库实现拼图小游戏

    C++基于EasyX库实现拼图小游戏

    这篇文章主要为大家详细介绍了C++基于EasyX库实现拼图小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++详细讲解常用math函数的用法

    C++详细讲解常用math函数的用法

    C++提供了很多实用的数学函数,如果要使用先添加头文件,当然,加头文件谁都知道,接下来我们一起详细看看各个math函数的实际使用
    2022-04-04
  • C语言圣诞树的实现示例

    C语言圣诞树的实现示例

    本篇主要介绍了C语言圣诞树的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12

最新评论