leetcode917仅反转字母

此题目较为简单,当涉及数组左右满足一定条件反转时,优先想到对撞指针的方法。
下面贴出代码,leetcode用时4ms

string reverseOnlyLetters(string s) {
    int l = 0;
    int r = s.size()-1;
    while(l<r){
        if(((s[l]>='A'&&s[l]<='Z')||(s[l]>='a'&&s[l]<='z'))&&((s[r]>='A'&&s[r]<='Z')||(s[r]>='a'&&s[r]<='z')))
            swap(s[l++],s[r--]);    //如果左右都是字母,则交换。
        else if(!((s[l]>='A'&&s[l]<='Z')||(s[l]>='a'&&s[l]<='z'))&&((s[r]>='A'&&s[r]<='Z')||(s[r]>='a'&&s[r]<='z')))
            l++;                    //左边不是字母,左边做加一操作。
        else if(((s[l]>='A'&&s[l]<='Z')||(s[l]>='a'&&s[l]<='z'))&&!((s[r]>='A'&&s[r]<='Z')||(s[r]>='a'&&s[r]<='z')))
            r--;                   //右边不是字母,右边做减一操作。
        else                       //都不是字母,则左加一右减一。
        {
            l++;
            r--;
        }
    }
      return s;
    }

主要算法实现部分,注释均已注明,请认真思考。

猜你喜欢

转载自blog.csdn.net/weixin_42183514/article/details/82960252
今日推荐