您的位置:首页 > 其它

leetcode--Reverse Words in a String

2014-08-13 20:42 369 查看
Problem Description:

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.

分析:按照题目的意思,将字符串按照单词进行翻转,其实跟字符串循环移位的原理是一样的,先整体翻转一次,然后将其中每个单词再翻转一次即可达到目的,题目提到要注意将首尾多余的空格都去掉,同时中间单词之间只留下一个空格,多余的也去掉,编程时注意细节即可。具体代码如下:
class Solution {
public:

void reverse1(string &s, int beg, int last)
{
if(beg==last)
return;
for(int i=beg,j=last;i<j;i++,j--)
{
char ch=s[i];
s[i]=s[j];
s[j]=ch;
}
}

void reverseWords(string &s) {
int i=0;
while(i<s.size()&&s[i]==' ')
i++;
s.erase(0,i);//去掉开头的空格
if(s.size()==0)
return;
int j=s.size()-1;
while(j>=0&&s[j]==' ')
j--;
s.erase(j+1,s.size()-j);//去掉末尾的空格
i=0;
j=s.size();
reverse1(s,0,j-1);//整体翻转一次

int left=0,flag=0;
while(s[i]!='\0')
{

if(s[i]==' ')
{
int k=i+1;
while(s[k]==' ')
{
flag++;
k++;
}

s.erase(i,flag);//去掉中间多余的空格

reverse1(s,left,i-1);//每个单词依次翻转
left=i+1;
flag=0;
}
i++;
}
reverse1(s,left,i-1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: