Reverse Words in a String
2014-09-11 14:38
162 查看
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++;
}
}
}//for
if(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;
}
};
相关文章推荐
- [leedcode 151] Reverse Words in a String
- 【Leetcode】Reverse Words in a String
- 《leetCode》:Reverse Words in a String
- leetcode解题报告 Reverse Words in a String
- Reverse Words in a String II
- 151. Reverse Words in a String
- leetcode 【 Reverse Words in a String 】python 实现
- leetcode 虐我篇之(一)Reverse Words in a String
- 【小熊刷题】reverse words in a string w. or w/o. allocating extra space
- ReverseWordsInAString
- Reverse Words in a String II
- [Lintcode]Reverse Words in a String
- LeetCode 之 Reverse Words in a String — C 实现
- leetcode之Reverse Words in a string
- leetcode--Reverse Words in a String
- 557. Reverse Words in a String III
- LeetCode - Reverse Words in a String I && II
- leetcode.557.Reverse Words in a String III
- LEETCODE: Reverse Words in a String
- leetcode 151: Reverse Words in a String