leetcode917僅反轉字母
阿新 • • 發佈:2018-12-14
此題目較為簡單,當涉及陣列左右滿足一定條件反轉時,優先想到對撞指標的方法。 下面貼出程式碼,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; }
主要演算法實現部分,註釋均已註明,請認真思考。