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

示例 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. 使用js json/xml互相转换

    <html> <head> <title>json与xml互转</title> <script type="text/javascrip ...

  2. Spring Boot2 系列教程(十六)定时任务的两种实现方式

    在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Qua ...

  3. 第三方软件 radmin提权

    一款远控工具 端口扫描 4899 端口 上传 radmin.asp 木马读取 radmin的加密密文 下载radmin工具连接

  4. Linux shell脚本笔记

    shell 命令解释器 是用来解释用户对系统的操作 使用 cat /etc/shells 可以查看 系统安装的shell Linux 启动过程: BIOS -> MBR -> BootLo ...

  5. mongodb学习笔记系列一

    一.简介和安装 ./bin/mongod --dbpath /path/to/database --logpath /path/to/log --fork --port 27017 mongodb非常 ...

  6. Twitter-Snowflake:自增ID算法

    简介 Twitter 早期用 MySQL 存储数据,随着用户的增长,单一的 MySQL 实例没法承受海量的数据,后来团队就研究如何产生完美的自增ID,以满足两个基本的要求: 每秒能生成几十万条 ID ...

  7. 解决Anki服务器同步问题:坚果云 & Floder sync (已测试)

    读前须知: 更新日期:2019-07-08 1.本教程面向对象为:有一定计算机知识人群 2.配合参考链接中的文章,共同食用. 3.已经过测试,可同步图片,音频,视频 4.尝试有风险,提前导出Anki卡 ...

  8. 机器学习回顾篇(8):CART决策树算法

    1 引言 上一篇博客中介绍了ID3和C4.5两种决策树算法,这两种决策树都只能用于分类问题,而本文要说的CART(classification and regression tree)决策树不仅能用于 ...

  9. Markdown进阶(1)

    对于工科生来说,在书写Markdown文本时,免不了要和上下标打交道,网上的博客大多良莠不齐,不太友好,本文想尽可能地解决一些在看完基础教程后再来书写Markdown文本时容易遇到的问题. 1.上下标 ...

  10. PhpStorm10和Apache24配置多项目开发环境

    PhpStorm10和Apache24配置多项目开发环境 Apache配置 httpd.conf LoadModule vhost_alias_module modules/mod_vhost_ali ...