代码编织梦想

【LeetCode 151 反转字符串中的单词】


给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格
LeetCode 151

示例 1

输入:s = "the sky is blue"
输出:"blue is sky the"

示例 2

输入:s = "  hello world  "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3

输入:s = "a good   example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

提示

  • 1 <= s.length <= 104
  • s 包含英文大小写字母、数字和空格 ’ ’
  • s 中 至少存在一个 单词

题解

局部旋转+整体旋转,类似题目左旋转字符串

  1. 去除首尾空格;
  2. 翻转每个单词;
  3. 翻转整个字符串;
  4. 翻转过程中处理单词之间的空格;

Solution

class Solution {
    public String reverseWords(String s) {
        if (s == null) {
            return null;
        }

        // remove all leading and trailing whitespace from this string
        s = s.trim();
        if (s.length() == 0) {
            return s;
        }

        // reverse each word in this string
        StringBuilder stringBuffer = new StringBuilder();
        int left = 0;
        int right = 0;
        while (right <= s.length()) {
            if (right == s.length() || s.charAt(right) == ' ') {
                stringBuffer.append(' ');
                stringBuffer.append(swap(s.substring(left, right)));
                while (right < s.length()) {
                    if (s.charAt(right) != ' ') {
                        left = right;
                        break;
                    }
                    right++;
                }
            }
            right++;
        }

        // reverse whole string
        return swap(stringBuffer.substring(1));
    }

    private String swap(String str) {
        char[] array = str.toCharArray();
        int start = 0;
        int end = str.length() - 1;
        while (start < end) {
            array[start] ^= array[end];
            array[end] ^= array[start];
            array[start] ^= array[end];
            start++;
            end--;
        }

        return new String(array);
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GeneLee_/article/details/128364367

删除字符串中各单词间多余空格_axm2008的博客-爱代码爱编程

删除字符串中各单词间多余空格 编程实现删除字符串中各单词间多余空格,只保留一个空格。如果字首字符中有连续空格,应完全删除;如果非字母字符前后有空格应该将空格完全删除;如果末尾是一连续空格也应将其删除。 如:输入字符串“

删除字符串中多余的空格_一只睡不醒的猪的博客-爱代码爱编程_删除字符串中多余的空格

删除字符串中多余的空格 首先我们需要将字符串中字符之间多余一个的空格删除掉 例如"i am a student"修改后应为’‘i am a student" 算法思想: 先找到一个空格i,若i+1也为空格,则进行下一步

c++实现反转字符串里的单词-爱代码爱编程

文章目录 0 问题描述1 方法一2 方法二3 方法三 0 问题描述 给定一个字符串,逐个翻转字符串中的每个单词。 示例: 输入: "the sky is blue", 输出: "blue is sky

翻转单词单词顺序 C/C++实现-爱代码爱编程

要求:将一个英文语句以单词为单位逆序排放。 例如“I am a boy”,逆序排放后为“boy a am I”所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符 解法1:#include <string> #include <iostream> using namespace std; void reverse

LeetCode 151. 翻转字符串里的单词-爱代码爱编程

题目描述 给你一个字符串 s ,逐个翻转字符串中的所有 单词 。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。 说明: 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。 翻转后单词间应当仅用一个空格分隔。 翻转后的字符串中不应包含额外的空

LeetCode第151题—翻转字符串里的单词—Python实现-爱代码爱编程

title: LeetCode No.151 categories: OJLeetCodetags: ProgramingLeetCodeOJLeetCode第151题—翻转字符串里的单词 自己代码的开源仓库:click here 欢迎Star和Fork 😃 题目描述 给你一个字符串 s ,逐个翻转字符串中的所有 单词 。 单词 是由非空格字

【Leetcode】151. 翻转字符串里的单词-爱代码爱编程

题目描述 给你一个字符串 s ,逐个翻转字符串中的所有 单词 。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。 说明: 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。 翻转后单词间应当仅用一个空格分隔。 翻转后的字符串中不应包含额外

数字颠倒的c++两种方式实现-爱代码爱编程

题目描述: 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001 方式一: #include <iostream> using namespace std; int main() { int a; cin >> a; d

【Leetcode】【字符串】翻转单词-爱代码爱编程

原地翻转,空间o(1) 先将单词移动到最前面, 再局部翻转单词,最后整体翻转 class Solution { public: string reverseWords(string s) { int i = 0, index = 0, size = s.size(); while(i < size)

C++实现字符串翻转-爱代码爱编程

题目: 输入一个字符串(不含空格),实现字符串的翻转(倒序输出)。 分析: 可以使用递归思想,通过自定义函数来实现。 substr()函数的用法:该函数定义在头文件<cstring>中;s.substr(pos,n)的含义:返回一个字符串 ,该字符串是从s中的pos位置开始拷贝n个字符 例如:s=abcde  则s.s

字符串中等 LeetCode151. 颠倒字符串中的单词-爱代码爱编程

151. 颠倒字符串中的单词 描述 给你一个字符串 s ,颠倒字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个

Leetcode刷题-151:颠倒字符串中的单词-爱代码爱编程

解题思路 1.题目描述2.题目分析2.1 整体思路描述2.2 实施2.2.1 去除不规则空格2.2.2 字符串的局部倒置3.题目解答3.1 使用erase进行空格去重复3.2 使用快慢指针进行空格去重复 1.题目描述 给你一个字符串 s ,颠倒字符串中单词的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。

C++编程-反转字符串中的单词-爱代码爱编程

题目: 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 输入:s = “Let’s take LeetCode contest” 输出:“s’teL ekat edoCteeL tsetnoc” 示例 2: 输入: s = “God Ding” 输出:“doG gniD” 提示: 1 &

c++ 翻转字符串里面的单词_鋮_拉姆的博客-爱代码爱编程

题目: 给定一个字符串,逐个翻转字符串中的每个单词。 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 2: 输入: "  hello world!  " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 示例 3: 输入:

c++,字符串:单词倒排_ceqo的博客-爱代码爱编程

题目: 单词倒排 总时间限制:  1000ms 内存限制:  65536kB 描述 编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。 输入 输入为一个字符串(字符串长度至多为100)。 输出 输出为按要求排序后的字符串。 样例输入 I am a student

leetcode_字符串_中等_151.颠倒字符串中的单词-爱代码爱编程

目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个字符串 s ,颠倒字符串中单词的顺序。 单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。 返回单词

c++将字符串颠倒输出_c++倒序输出字符串-爱代码爱编程

请定义一个类Test,其拥有一个私有数据成员str(string类型),和其他对字符串进行简单操作的行为。请根据如下main函数的代码完成类Test的定义 int main() { string str; //输入一个字符串 getline(cin, str); //实例化对象 Test* s = new Test(); //设置对象中的

反转字符串,并去除前后多余空格_字符数组转字符串去掉后面空格-爱代码爱编程

" hello world I am judy! " 反转为: "judy! am I world hello" 步骤1:去除前后空格,中间多余空格去除 步骤2:反转所有字符串 步骤2:按单词反转 public class StringTest { public static void main(String[] args) {