LeetCode题解——Reverse Words in a String
2015-11-03 17:05
567 查看
Given an input string, reverse the string word by word.
For example,
Given s = "
return "
Try to solve it in-place in O(1)
space.
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.
解题思路:如果不需要inplace,那么可以借助于stringstream和vector或者substr等操作,可以很容易的实现reverse,但是如果要用inplace的翻转的话,需要新的想法。
分为两步:第一步翻转句子中的所有字符串,第二步翻转每个单词的顺序。在此过程中要考虑处理连续的空字符。
AC代码如下:
For example,
Given s = "
the sky is blue",
return "
blue is sky the".
Try to solve it in-place in O(1)
space.
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.
解题思路:如果不需要inplace,那么可以借助于stringstream和vector或者substr等操作,可以很容易的实现reverse,但是如果要用inplace的翻转的话,需要新的想法。
分为两步:第一步翻转句子中的所有字符串,第二步翻转每个单词的顺序。在此过程中要考虑处理连续的空字符。
AC代码如下:
class Solution { public: void reverseWords2(string &s,string::iterator begin,string::iterator end){ if(!*begin || !*end) return; while(begin<end){ char temp = *begin; *begin = *end; * end = temp; ++begin; --end; } } void reverseWords(string &s) { while(s.size() && *s.begin()==' ') s.erase(s.begin()); if(!s.size()) return; reverseWords2(s,s.begin(),s.end()-1); string::iterator begin = s.begin(), end =s.begin(); while(begin!=s.end()-1){ if(*begin==' '){ s.erase(begin);}//++begin; ++end;} else if(end == s.end() || *end ==' '){ reverseWords2(s,begin,end-1); if(end == s.end()) return; begin = ++end; } else{ ++end; } } } //erase操作耗时 };
相关文章推荐
- lucene4.2 java.lang.NullPointerException at org.apache.lucene.analysis.standard.StandardTokenizerIm
- JDBC基础学习笔记_04_jdbc事务处理
- redis入门笔记(2)
- ThinkPHP使用技巧经验总结
- android教程学习第十讲:启动脚本init.rc的学习
- 渗透测试学习系列之《Metasploitable介绍》(一)
- 习题2-4 字序列的和 解题报告
- Mysql忘记密码
- 图解如何用打印机套打快递单
- 【jQuery】遮罩效果的实现
- Building fw printenv and fw setenv
- redis入门笔记(1)
- Android 启动过程简析
- Newtonsoft.Json 将C#对象转化为json格式
- 网络TCP/UDP编程学习
- tabelayout,GridLayout的一些基础属性
- EAS BOS手动写的保存方法
- android中进行https连接的方式
- SetEvent与PulseEvent的区别
- HTTP 的get方法