给定一个字符串,逐个翻转字符串中的每个单词。

示例 1:

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

示例 2:

输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:

输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

说明:

  • 无空格字符构成一个单词。
  • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
  • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

进阶:

请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。

哈,拿到这题思维定势准备拿split做,然后发现世界上最好的语言——C++的标准库里并没有split的函数,于是费尽千辛万苦实现了一番C++版的split函数,然后老套路,倒序输出。

后由于用时过长,查看了提交区的大佬做法,基本的思路是将字符串翻转一遍后,再判断单词的界限再单独翻转单词,这样就满足了原地解法了。

代码如下:

class Solution {
public:
string reverseWords(string s) {
vector<string> get = split(s);
string ans="";
reverse(get.begin(),get.end());
for(string ss :get) {
ans=ans+ss+" ";
}
return ans.substr(,ans.size()-);
} vector<string> split(string s) {
string tmp="";
vector<string> ans;
for(int i=; i<s.size(); i++) {
char c=s[i];
if (c!=' ') {
tmp+=c;
} else {
if (tmp!="") {
ans.push_back(tmp);
tmp="";
}
}
}
if (tmp!="")
ans.push_back(tmp);
return ans;
}
};

以下为摘抄自提交区的大佬代码:

/*
先把每个词反转,再把整体反转
这个过程中需要:
去掉字符串开头和结尾的空格
去掉字符串中间多余的空格
*/
class Solution {
public:
void reverse(string& s,int left,int right){
int tmp;
while(left<right){
tmp=s[left];
s[left]=s[right];
s[right]=tmp;
++left;
--right;
}
}
string reverseWords(string s) {
if(s.size()==) return s;
int j=;
while(s[j]==' '){
s.erase(j,);
}
j=s.size()-;
while(s[j]==' '){
s.erase(j,);
j=s.size()-;
}
int i=;
while(i<s.size()){
if(s[i]==' '){
while(i+<s.size()&&s[i+]==' '){
s.erase(i+,);
}
++i;
}else{
int k=;
while(i+k<s.size()&&s[i+k]!=' '){
k++;
}
reverse(s,i,i+k-);
i=i+k; }
}
reverse(s,,s.size()-);
return s;
}
};

力扣(LeetCode)翻转字符串里的单词 个人题解的更多相关文章

  1. LeetCode 翻转字符串里的单词

    给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 2: 输 ...

  2. C#版(击败100.00%的提交) - Leetcode 151. 翻转字符串里的单词 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  3. leetcode python翻转字符串里的单词

    # Leetcode 151 翻转字符串里的单词### 题目描述给定一个字符串,逐个翻转字符串中的每个单词. **示例1:** 输入: "the sky is blue" 输出: ...

  4. LeetCode 151. 翻转字符串里的单词(Reverse Words in a String)

    151. 翻转字符串里的单词 151. Reverse Words in a String

  5. Java实现 LeetCode 151 翻转字符串里的单词

    151. 翻转字符串里的单词 给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: "the sky is blue" 输出: "blue is sky th ...

  6. 【LeetCode】151. 翻转字符串里的单词(剑指offer 58-I)

    151. 翻转字符串里的单词 知识点:字符串:双指针 题目描述 给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔 ...

  7. 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串

    [算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...

  8. 【LeetCode】151. Reverse Words in a String 翻转字符串里的单词(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.co ...

  9. LeetCode 151 翻转字符串里的单词

    题目: 给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 ...

随机推荐

  1. ‎Cocos2d-x 学习笔记(19) Control Invocation

    [Cocos2d-x 学习笔记 目录链接] 1. 简介 control为其子类提供了touch回调函数,当子类触发EventType相关事件时,会调用相关的回调函数. control对象接收到的事件类 ...

  2. 基于华为物联网IOT的应用开发 --- 基于.net 的SDK封装

    最近,物联网的概念比较热门,一大批厂商抢着占领物联网的高低,包括有华为物联网.阿里云物联网.腾讯物联网.AWS物联网等等,无法一一列举,一般物联网包含设备侧开发.平台侧开发.应用侧开发,三个部分构成了 ...

  3. epoll--IO多路复用

    理解 epoll 过程 #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...

  4. 图像处理 - ImageMagick 简单介绍与案例

    在客户端我们可以用 PhotoShop 等 GUI 工具处理静态图片或者动态 GIF 图片,不过在服务器端对于 WEB 应用程序要处理图片格式转换,缩放裁剪,翻转扭曲,PDF解析等操作, GUI 软件 ...

  5. V2er - Best client for V2EX

    V2er - Best client for V2EX 可能是体验最好的掌上 V2EX 客户端,专为 iOS 打造并在 Github 开源. 关于 V2EX,V2EX 是创意工作者们的社区.这里目前汇 ...

  6. OpenGL glMatrixMode() 函数解释与例子

    概述 glMatrixMode() 用以指定当前要操作的矩阵,可选值有 GL_MODELVIEW(模型视图,默认值),GL_PROJECTION(投影),GL_TEXTURE(纹理),GL_COLOR ...

  7. 百万年薪python之路 -- 面向对象之所有属性及方法

    1.私有成员公有成员 1.1 类的私有属性 # class A: # # name = '周道镕' # __name = 'zdr' # 私有类的属性 # # def func(self): # pr ...

  8. CheckBox状态多选

    前: <StackPanel Margin="> <Label FontWeight="Bold">Application Options< ...

  9. SpringBoot学习(一)基础篇

    目录 关于Springboot Springboot优势 快速入门 关于SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭 ...

  10. 像使用SQL一样对List对象集合进行排序

    在开始之前,我先卖个关子提一个问题:假设我们有一个Movie类,这个类有三个成员变量分别是starred(是否收藏), title(电影名称), rating(评分).你知道怎么对一个Movie对象组 ...