• 1、转换大小写
  • 2、用『双指针』进行获取结果
  • 吐槽:但是,这个题目的测试样例,似乎默认是一个空格,没有考虑多个空格的情况
class Solution {
public:
    string trans(string s, int n) {
        // write code here
        if( n<=0 )
        {
            return s;
        }
        int loop=n;
        //转换模块
        while( loop-- )
        {
            if( islower( s[loop] ) )
            {
                s[loop]=s[loop]-' ';
            }
            else if( isupper( s[loop] ) )
            {
                s[loop]=s[loop]+' ';
            }

        }

        //双指针
        int Left=n-1;
        int Right=n;
        string res;
        while( Left>=0 )
        {
            //不等于
            if( ' '!=s[Left] )
            {
                --Left;
            }
            else
            {
                if( Right-Left>1 )
                {
                    string temp=s.substr( Left+1, Right-Left-1 );
                    res+=temp;
                }
                Right=Left;
                --Left;
                res+=' ';
            }
        }

        if( Right-Left>1 )
        {
            string temp=s.substr( Left+1, Right-Left-1 );
            res+=temp;
        }
        return res;
    }
};

学习牛油的技巧

// 亦或技巧 字符a ^' ' 则大小写随意切换
c^=' ';