leetcode917仅反转字母

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

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;
    }

主要算法实现部分,注释均已注明,请认真思考。
另外,如果想要代码更简洁一些,if判断语句可以直接再使用一个while找到左侧第一个符合要求的指针(其实是索引,这里只是一个叫法),然后再用while找到右侧的,交换便可得到答案。

你可能感兴趣的:(leetcode)