[LeetCode]Reverse Words in a String
2015-07-24 21:37
351 查看
参考一些资料,分享一个简洁的代码
思路:
i, j分别指向一个单词的 首尾,从s的结尾开始向前遍历,找到一个单词就取出来放在StringBuilder中。
-----------第一遍的解题思路--------------
解题思路:
1,把首尾的 space都去掉
2,两个指针start和it分别指向word的开始和结束的下一位;
3,isPreWord用于指示前一个char是字母还是 空格(这是为了过滤两个单词中间有多个space的情况)
4,每发现一个新的完整的单词,就插入到ret的开头,接着插入一个 space
5,因为while循环中我们是以space作为发现单词的标志,而语句的结尾没有space,所以在while结束后,我们还有最后一个单词需要insert进去ret
6,最后str = ret;
思路:
i, j分别指向一个单词的 首尾,从s的结尾开始向前遍历,找到一个单词就取出来放在StringBuilder中。
public class Solution { public String reverseWords(String s) { StringBuilder builder = new StringBuilder(); int j = s.length(); for (int i = s.length() -1 ; i >= 0; --i){ if (s.charAt(i) == ' '){ j = i; }else if ( i == 0 || s.charAt(i-1) == ' '){ if (builder.length() != 0){ builder.append(' '); } builder.append(s.substring(i, j)); } } return builder.toString(); } }
-----------第一遍的解题思路--------------
解题思路:
1,把首尾的 space都去掉
2,两个指针start和it分别指向word的开始和结束的下一位;
3,isPreWord用于指示前一个char是字母还是 空格(这是为了过滤两个单词中间有多个space的情况)
4,每发现一个新的完整的单词,就插入到ret的开头,接着插入一个 space
5,因为while循环中我们是以space作为发现单词的标志,而语句的结尾没有space,所以在while结束后,我们还有最后一个单词需要insert进去ret
6,最后str = ret;
class Solution { public: void reverseWords(string &s) { strip(s); string ret; auto it = s.begin(); auto start = it; bool isPreWord = false; while(it != s.end()){ if (*it == ' '){ if (isPreWord){ isPreWord = false; ret.insert(ret.begin(), start, it); ret.insert(0, 1, ' '); }else{ it++; } }else{ if (!isPreWord){ isPreWord = true; start = it; } it ++; } } ret.insert(ret.begin(), start, it); s = ret; } void strip(string &s){ lstrip(s); rstrip(s); } void lstrip(string &s){ auto it = s.begin(); while(it != s.end()){ if (*it == ' '){ it = s.erase(it); }else{ break; } } } void rstrip(string &s){ auto rit = s.rbegin(); while(rit != s.rend()){ if (*rit == ' '){ rit = string::reverse_iterator(s.erase((++rit).base())); }else{ break; } } } };
相关文章推荐
- PAT (Basic Level) Practise (中文)1033. 旧键盘打字(20) C语言
- HDOJ-2091 空心三角形 C语言
- PHP CURL CURLOPT参数说明(curl_setopt)
- JavaScript入门篇 第三天(认识DOM)
- 《ASP.NET》数据绑定——GridView
- Spark 调优
- [C Language]一个c回调函数的例子
- 字节流InputStream和OutputStream简单使用
- 杭电2005 第几天 函数形式
- *HDU 5305 - Delicious Apples (贪心+背包)
- HD2091 空心三角形
- Java 注解
- 每天一个小知识点12(jQueryMobile总结三)
- Spring(九)让Spring自动扫描和管理Bean
- 省市区字典数组嵌套(UI版)
- MATLAB 概率统计
- 数据流重定向
- HDOJ-1201 18岁生日
- C# ?? 和 ?: 运算符
- 防止两提交同一异步任务