Reverse Words in a String
来源:互联网 发布:淘宝交易订单生成器 编辑:程序博客网 时间:2024/06/05 19:11
Reverse Words in a String
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.
分析:两次反转。先将整个句子反转,然后每个单词反转。本来思想比较简单直接,扫描两遍即可O(N)。空格的处理坑死人。 注意处理句子两头的空格,单词间隔中间多个空格的压缩成一个空格。
代码:
class Solution {public: void reverseWords(string &s) {//基本思想,两次反转 if(s.length()<1) return ; //1.第一次反转 reverse(s.begin(),s.end()); int len=s.length();//去空格int i=0;while(i<len && s[i]==' ') i++;if(i>=len) {s=""; return;}s.erase(0,i);len=len-i;//erase后串长度变化,要更新串长int k=-1; //k i两个指针一前一后,去掉单词中间多余的空格for(i=0;i<len;i++){if(s[i]!=' '){k++; s[k]=s[i];}else if((i<len-1) && s[i]==' ' && s[i+1]==' '){continue;}else{// if(s[i]==' ' && s[i+1]!=' ')if(i==len-1){//最后一个是字符if(s[i]!=' ') {k++; s[k]=s[i];}break;} k++;s[k]=s[i];}}//删除末尾多余的空间k++;s.erase(k); i=0;len=k;//更新串长度 int j=i; for(;i<len;i++){ if(s[i]==' '){ reverse(s.begin()+j,s.begin()+i);j=i; while(i<len && s[i]==' '){ i++; j++;} } }//forif(i>=len && j<len){reverse(s.begin()+j,s.begin()+i);//最后一个单词无法用空格判断} return ; }};
方法二:
声明一个变量,来存储反转后的结果,然后赋值给s。从后往前扫描,遇到单词,反转。
class Solution {public: void reverseWords(string &s) { string rs; for (int i = s.length()-1; i >= 0; ) { while (i >= 0 && s[i] == ' ') i--; if (i < 0) break; if (!rs.empty()) rs.push_back(' '); string t; //存储单个单词 while (i >= 0 && s[i] != ' ') t.push_back(s[i--]); reverse(t.begin(), t.end());//单词反转 rs.append(t); //放入结果中 } s = rs; } };
0 0
- Reverse words in a string.
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- Reverse Words in a String
- SystemTap Beginner
- iOS本地推送
- tiny6410按键platform(平台)驱动的实现
- radio checkbox 判断是否选中
- [Client]动检参数讨论与ONVIF
- Reverse Words in a String
- Iterator与ListIterator有什么区别?
- 百度地图定位getAddrStr() 获取为空
- Spring3.x--自动装配Bean属性
- linux thread mutex
- Java4Android之socket网络通信基础
- Linux环境变量配置文件
- Linux proc机制
- PHP入门的感受