博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]151.Reverse Words in a String
阅读量:6721 次
发布时间:2019-06-25

本文共 3582 字,大约阅读时间需要 11 分钟。

题目

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

For example,

Given s = “the sky is blue”,
return “blue is sky the”.

Update (2015-02-12):

For C programmers: Try to solve it in-place in O(1) space.

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.

思路

两次反转法。这里注意单词之间的多个空格只留一个空格以及去掉前导0和后导0。

代码

/*---------------------------------------*   日期:2015-05-05*   作者:SJF0115*   题目: 151.Reverse Words in a String*   网址:https://leetcode.com/problems/reverse-words-in-a-string/*   结果:AC*   来源:LeetCode*   博客:-----------------------------------------*/#include 
#include
using namespace std;class Solution {
public: void reverseWords(string &s) { int size = s.size(); if(size <= 0){ return; }//if // 前导0 int index = 0; while(s[index] == ' '){ ++index; }//while int left = index; // 后导0 index = size - 1; while(s[index] == ' '){ --index; }//while int right = index; // 连续空格只保留一个 for(int i = left;i <= right;){ if(i > left && s[i-1] == ' ' && s[i] == ' '){ s.erase(i-1,1); --right; }//if else{ ++i; } }//for // 翻转 int start = left,end = left; for(int i = left;i <= right+1;++i){ if(i == right+1 || s[i] == ' '){ Reverse(s,start,end-1); ++end; start = end; }//if else{ ++end; }//else }//for // 整体翻转 Reverse(s,left,right); s = s.substr(left,right - left + 1); }private: void Reverse(string &str,int start,int end){ for(int i = start,j = end;i < j;++i,--j){ swap(str[i],str[j]); }//for }};int main() { Solution solution; //string str(" abc cd ef "); string str(" a vvv "); solution.reverseWords(str); cout<
<

运行时间

这里写图片描述

代码二

/*---------------------------------------*   日期:2015-05-05*   作者:SJF0115*   题目: 151.Reverse Words in a String*   网址:https://leetcode.com/problems/reverse-words-in-a-string/*   结果:AC*   来源:LeetCode*   博客:-----------------------------------------*/#include 
#include
using namespace std;class Solution {
public: void reverseWords(string &s) { int size = s.size(); if(size <= 0){ return; }//if int index = size - 1; string str; while(index >= 0){ // 空格 while(index >= 0 && s[index] == ' '){ --index; }//while if(index < 0){ break; }//if if(str.size() != 0){ str.push_back(' '); }//if string tmp; while(index >= 0 && s[index] != ' '){ tmp.push_back(s[index]); --index; }//while // 翻转 reverse(tmp.begin(),tmp.end()); str.append(tmp); }//while s = str; }};int main() { Solution solution; string str(" abc cd ef "); //string str(" a "); solution.reverseWords(str); cout<
<

运行时间

这里写图片描述

你可能感兴趣的文章
UOJ#428. 【集训队作业2018】普通的计数题
查看>>
[HNOI2015]菜肴制作
查看>>
使用百分比固定的table大小中td内容自动换行问题
查看>>
如何给系统升级
查看>>
《Red Dog》——流浪、阳光和那些让人缅怀的画面
查看>>
jquey动画效果
查看>>
计算 $s=1+(1+2)+(1+2+3)+\cdots+(1+2+3+\cdots+n)$
查看>>
《解析几何》吕林根,徐子道第四版 习题 1.4.7,1.4.8,1.4.9
查看>>
ruby Logger日志
查看>>
【应用】浮点数四则运算器 Part3:运算模块的编写
查看>>
puppet使用 apache passsenger 作为前端 (debian)
查看>>
IDA*
查看>>
双机调试和windbg的命令
查看>>
20155229《网络对抗技术》Exp8:Web基础
查看>>
MVC中用js写入的button按钮单击事件失效问题
查看>>
POJO与javabean的区别
查看>>
数据结构与算法设计--树的镜像
查看>>
Oracle常用的性能诊断语句
查看>>
Shell命令-文件及内容处理之more、less
查看>>
实验5 数独游戏界面设计
查看>>