题意:


方法:
模拟

思路:
        模拟。
        首先,反转字符串;
        然后,遍历字符串,
        如果是字符,则合并单词;
        如果是第一个空格,则将单词反转、大小写字母切换,并且覆盖原字符串。
        最后返回原字符串即可。



class Solution {
public:
    string trans(string s, int n) {
        reverse(s.begin(),s.end());//反转字符串
        string x="";
        int flag=0;
        for(int i=0;i<n;i++){//遍历字符串
            if(s[i]!=' '){//如果是字符,则合并单词
                x+=s[i];
                flag=1;
            }else if(flag){//如果是第一个空格,则将单词反转、大小写切换,并且覆盖原字符串
                flag=0;
                int len=x.size();
                for(int j=0;j<len;j++){
                    if(islower(x[j])){
                        x[j]-=32;
                    }else{
                        x[j]+=32;
                    }
                    s[i-1-j]=x[j];
                }
                x="";
            }
        }
        if(flag){//最后的一个单词的判断
            flag=0;
            int len=x.size();
            for(int j=0;j<len;j++){
                if(islower(x[j])){
                    x[j]-=32;
                }else{
                    x[j]+=32;
                }
                s[n-1-j]=x[j];
            }
            x="";
        }
        return s;
    }
};


时间复杂度:
空间复杂度: