1. 程式人生 > >leetcode917僅反轉字母

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

主要演算法實現部分,註釋均已註明,請認真思考。