0
点赞
收藏
分享

微信扫一扫

AcWing 77. 翻转单词顺序(C++)- 字符串处理、操作分解、双指针

搬砖的小木匠 2022-04-21 阅读 64
c++

题目链接:https://www.acwing.com/problem/content/73/
题目如下:
在这里插入图片描述

class Solution {
public:
    string reverseWords(string s) {
        s.erase(0,s.find_first_not_of(' '));
        s.erase(s.find_last_not_of(' ')+1);
        //思路:先整体反转,再单个反转;或先单个反转,再整体反转
        reverse(s.begin(),s.end());
        
        for(int i=0,j=0;j<s.size();j++){//双指针i和j确定一个单词的首尾,进行反转
            if(j+1==s.size()) reversestr(s,i,j);
            if(s[j]==' '){
                reversestr(s,i,j-1);
                i=j+1;
                while(j+1<s.size()&&s[j+1]==' '){
                    s.erase(j+1,1);
                    j++;
                }
            }
        }
        
        return s;
    }
    void reversestr(string& str,int i,int j){
        while(i<j){
            swap(str[i],str[j]);
            i++;
            j--;
        }
    }
};
举报

相关推荐

0 条评论