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 = "
return "
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);
}
};
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);
}
};
相关文章推荐
- Leetcode 第151题 最新题解 Reverse Words in a String
- leetcode JAVA Reverse Words in a String 难度系数2-3?最新题151
- LeetCode(151)Reverse Words in a String
- Leetcode: Reverse Words in a String
- LeetCode Reverse Words in a String
- 【LeetCode with Python】 Reverse Words in a String
- [LeetCode]Reverse Words in a String
- leetcode 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 (LeetCode)
- [Leetcode Solution] Reverse Words in a String
- LeetCode151:Reverse Words in a String
- 【LeetCode】Reverse Words in a String
- [leetCode]Reverse Words in a String
- leetcode - Reverse Words in a String
- [LeetCode] Reverse Words in a String
- 【LeetCode】Reverse Words in a String
- 【LeetCode】Reverse Words in a String