一、题目:

Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

click to show clarification.

Clarification:

  • What constitutes a word?
    A sequence of non-space characters constitutes a word.
  • Could the input string contain leading or trailing spaces?

    Yes. However, your reversed string should not contain leading or trailing spaces.

  • How about multiple spaces between two words?
    Reduce them to a single space in the reversed string.

原题地址

二、解题思想

翻转字符串中的单词顺序,这是个老题目了。可是leetcode上面的要求更为严格。如:

要求把开头和结尾的空格删除掉;

缩减单词间的空格数为1(假设有多个空格)。

单词若全是空格,则返回一个空字符串("").

此题思想不难。主要是注意上面三个要求和一些细节就能够AC。
大致分为两步:一个是常规的翻转字符串中的单词;还有一个就是想方法去掉串中的多余的单词;这两步骤的顺序能够颠倒。

以下给出两份代码。第一个代码是先去掉多余的空格。然后在翻转;第二个代码先翻转,在去掉多余的空格。就效率上来说应该是第一个代码的效率更高。

三、代码实现

代码一:
class Solution {
public:
void reverseWords(string &s) {
if(s.size()<=0) return ;
char *work = new char[s.size()+1];
//reduce blank
int j=0;
for(int i=0; s[i]!='\0'; ++i){
if(i>0 && s[i] == ' ' && s[i-1]!= ' ')
work[j++] = s[i];
else if(s[i] != ' ')
work[j++] = s[i];
}
if(j>0 && work[j-1]==' ')
work[--j] = '\0';
else
work[j] = '\0';
//reverse all string
reverse(work, 0, j-1);
int p= 0, i=0;
//reverse each word
while(i<j){
while(p<j && work[p]!=' ') p++;
reverse(work, i, p-1);
i = p+1;
p = i;
}
string temp(work);
s = temp;
} void reverse(char *s, int beg, int end){
while(beg < end){
char temp = s[beg];
s[beg++] = s[end];
s[end--] = temp;
}
}
};
代码二:
class Solution {
public:
void reverseWords(string &s) {
int n = s.size();
if(n<=0) return;
//if(n==1)
//reverse the whole string
reverse(s, 0, n-1);
//reverse each word
int begin=0, end = 0;
while(begin<n){
while( begin< n && s[begin] == ' ') ++begin;
end = begin;
while( end<n && s[end] != ' ') ++end;
reverse(s, begin, end-1);
begin = end;
}
//reduce blank
begin = 0;
while(begin<n && s[begin] ==' ') ++begin;
if(begin == n) {s = s.substr(0,0);return;} end = n-1;
while(end>=0 && s[end] == ' ') --end; int start = 0;
char pre;
for(; begin<=end; ++begin){
if(s[begin] != ' '){
s[start++] = s[begin];
pre = s[begin];
}else{
if(pre != ' '){
s[start++] = ' ';
pre = ' ';
}
}
}
if(start != n) s = s.substr(0, start);
} void reverse(string &s, int begin, int end){
char temp;
while(begin<end){
temp = s[begin];
s[begin++] = s[end];
s[end--] = temp;
}
}
};

假设你认为本篇对你有收获。请帮顶。

另外,我开通了微信公众号--分享技术之美。我会不定期的分享一些我学习的东西.

你能够搜索公众号:swalge 或者扫描下方二维码关注我
(转载文章请注明出处: http://blog.csdn.net/swagle/article/details/28236933
)

[leetcode] Reverse Words in a String [1]的更多相关文章

  1. LeetCode: Reverse Words in a String:Evaluate Reverse Polish Notation

    LeetCode: Reverse Words in a String:Evaluate Reverse Polish Notation Evaluate the value of an arithm ...

  2. [LeetCode] Reverse Vowels of a String 翻转字符串中的元音字母

    Write a function that takes a string as input and reverse only the vowels of a string. Example 1:Giv ...

  3. [LeetCode] Reverse Words in a String II 翻转字符串中的单词之二

    Given an input string, reverse the string word by word. A word is defined as a sequence of non-space ...

  4. [LeetCode] Reverse Words in a String 翻转字符串中的单词

    Given an input string, reverse the string word by word. For example, Given s = "the sky is blue ...

  5. LeetCode Reverse Words in a String II

    原题链接在这里:https://leetcode.com/problems/reverse-words-in-a-string-ii/ 题目: Given an input string, rever ...

  6. [LeetCode] Reverse Words in a String III 翻转字符串中的单词之三

    Given a string, you need to reverse the order of characters in each word within a sentence while sti ...

  7. LeetCode: Reverse Words in a String 解题报告

    Reverse Words in a String Given an input string, reverse the string word by word. For example,Given ...

  8. LeetCode Reverse Vowels of a String

    原题链接在这里:https://leetcode.com/problems/reverse-vowels-of-a-string/ 题目: Write a function that takes a ...

  9. LeetCode: Reverse Words in a String && Rotate Array

    Title: Given an input string, reverse the string word by word. For example,Given s = "the sky i ...

  10. [leetcode]Reverse Words in a String @ Python

    原题地址:https://oj.leetcode.com/problems/reverse-words-in-a-string/ 题意: Given an input string, reverse ...

随机推荐

  1. 自动生成DTO(EF框架)

    [0]安装相关工具包 PostgreSQL版本: Npgsql.EntityFrameworkCore.PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL ...

  2. 从0开始学习ssh之岗位管理

    岗位应该有如下属性,id.名称.说明.新建role.java.添加id,name,description并增加三个的get set方法. 之后建立Role.hbm.xml 并加入到applicatio ...

  3. elasticsearch 中文API 索引(三)

    索引API 索引API允许开发者索引类型化的JSON文档到一个特定的索引,使其可以被搜索. 生成JSON文档 有几种不同的方式生成JSON文档 利用byte[]或者作为一个String手动生成 利用一 ...

  4. 1、mysql安装教程

    1.https://www.runoob.com/mysql/mysql-install.html   参考安装链接 Windows 上安装 MySQL Windows 上安装 MySQL 相对来说会 ...

  5. Android 开发 防止按键连续点击

    前言 按键防止连续点击是任何一个项目都要考虑的功能.下面我们将介绍几种防止按键连续点击的方法 用工具类实现 /** *@content:按键延时工具类,用于防止按键连点 *@time:2019-5-1 ...

  6. 我的js运动库新

    1.一些样式的获取和设置 //通过id获取当前元素 //params:id function $id(id) { return document.getElementById(id); } //向cs ...

  7. 处理iphone的 .play() 不能播放问题

    一.添加音乐 <audio id="Jaudio" src="shake.mp3" preload loop="loop" contr ...

  8. SELinux安全方式

    一.SElinux配置文件 在CentOS 7系统中部署SELinux非常简单,由于SELinux已经作为模块集成到内核中,默认SELinux已经处于激活状态.对管理员来说,更多的是需要配置与管理SE ...

  9. 彻底理解setTimeout()

    之前在网上看了很多关于setTimeout的文章,但我感觉都只是点到为止,并没有较深入的去剖析,也可能是我脑袋瓜笨,不容易被点解.后面看了<你不知道的javascript-上卷>一书,决定 ...

  10. 威胁快报|ProtonMiner挖矿蠕虫扩大攻击面,加速传播

    背景 近日,阿里云安全监测到一种挖矿蠕虫,正在互联网上加速传播.阿里云安全根据它使用ProtonMail邮箱地址作为矿池用户名的行为,将其命名为ProtonMiner.据分析,这种蠕虫与TrendMi ...