0
点赞
收藏
分享

微信扫一扫

leetcode 151 颠倒字符串中的单词

大南瓜鸭 2022-04-13 阅读 193
leetcodec++

我这里分为3个步骤:

  1. 去除多余空格
  2. 翻转字符串
  3. 使用指针截出每一个单词的长度,在翻转回来
    class Solution {
    public:
        void reverse(string&s,int start,int end)
        {
           for(int i=start,j=end;i<j;++i,--j)
           swap(s[i],s[j]);
        }
        //去除空格,用双指针
        void removespace(string&s)
        {
            int fastindex=0,slowindex=0;
            //去除前导空格
            while(s.size()>0&&fastindex<s.size()&&s[fastindex]==' ')
            {
                ++fastindex;
            }
            //去除中间空格
            for(;fastindex<s.size();++fastindex)
            {
                if(fastindex-1>0&&s[fastindex-1]==s[fastindex]&&s[fastindex]==' ')
                {
                    continue;
                }
                else{
                    s[slowindex++]=s[fastindex];
                }
            }
            //去除尾随空格
            if(slowindex-1>0&&s[slowindex-1]==' ')
            {
                s.resize(slowindex-1);
            }
            else{
                s.resize(slowindex);
            }
    
        }
        string reverseWords(string s) {
            //去掉空格
            removespace(s);
            //单词区间
            int begin=0,end=0;
            bool flag=false;
            //翻转字符串
            reverse(s,0,s.size()-1);
            for(int i=0;i<s.size();++i)
            {
                //确定单词开头元素
                if(!flag)
                {
                    begin=i;
                    flag=true;
                }
                //确定单词最后一个元素的位置
                if(flag&&s[i]==' '&&s[i-1]!=' ')
                {
                    end=i-1;
                    flag=false;
                    reverse(s,begin,end);
                }
                //处理最后一个单词没有空格
                if(flag&&(i==(s.size()-1))&&s[i]!=' ')
                {
                    end=i;
                    flag=false;
                    reverse(s,begin,end);
                }
            }
            return s;
    
        }
    };

举报

相关推荐

0 条评论