leetcode - Reverse Words in a String

来源:互联网 发布:javascript hide div 编辑:程序博客网 时间:2024/06/05 10:30

题意:

Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

Update (2015-02-12):
For C programmers: Try to solve it in-place in O(1) space.

click to show clarification.

思路:先将字符串中连续空格删除,不同单词之间仅保留一个空格。同时将开始的空格删除,结尾的空格删除。

         然后将字符串进行就地逆置,将字符串的各个单词进行就地逆置。

       

class Solution {public:    void delete_kong(string &s)    {        int i = 0;        int len = s.length();        int index = 0;        for(i = 0;i<len;i++)        {            if(s[i] == ' ')            continue;            else            break;        }        int j = i;        for(j = i;j<len;j++)        {            if(s[j] == ' ' && j+1<len && s[j+1] == ' ')             {                 continue;             }             else            {                s[index] = s[j];                index++;            }        }        if(s[index-1] == ' ')            index--;        s = s.substr(0,index);    }    void reverse(string &s,int start,int end)    {        int i = 0;        int mid = (end-start)/2;        for(i = 0;i<=mid;i++)        {            char temp = s[start+i];            s[start+i]= s[end-i];            s[end-i] = temp;        }    }    void reverseWords(string &s) {        int i = 0;        if(s == " " || s== "")          s = "";        delete_kong(s);        int len = s.length();        int start = 0;        int end = len-1;        reverse(s,start,end);        //cout<<s<<endl;        for(i = 0;i<len;i++)        {            if(s[i] == ' ')            {                if((i-1)>=0)                {                    end = i-1;                    reverse(s,start,end);                    start = i+1;                    end = i+1;                }            }        }        end = len-1;        reverse(s,start,end);        }};

        

0 0
原创粉丝点击