leetcode-917-僅僅反轉字母
阿新 • • 發佈:2018-10-13
ring 一個 tco while 符號 letters ats swa size
題目描述:
給定一個字符串 S
,返回 “反轉後的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置發生反轉。
示例 1:
輸入:"ab-cd"
輸出:"dc-ba"
示例 2:
輸入:"a-bC-dEf-ghIj"
輸出:"j-Ih-gfE-dCba"
示例 3:
輸入:"Test1ng-Leet=code-Q!"
輸出:"Qedo1ct-eeLg=ntse-T!"
提示:
S.length <= 100
33 <= S[i].ASCIIcode <= 122
S
中不包含\
or"
要完成的函數:
string reverseOnlyLetters(string S)
說明:
1、給定一個字符串S,裏面存放著字母(有大寫有小寫),和一些非字母符號。
現在要求將字符串中的字母反轉,而非字母字符則停留在原地不做任何改變。
比如a-bcd,反轉完應該是d-cba。
最後返回反轉後得到的字符串。
2、這道題比較容易,定義兩個指針,一個從前開始,一個從後開始,當兩個指針對應的都是字母時,交換他們。
接著前面的指針往後走,後面的指針往前走,不斷交換,直到兩個指針到達同一個位置。
代碼如下:(附詳解)
string reverseOnlyLetters(string S) { int i=0,s1=S.size(),j=s1-1; while(i<j)//當i和j還沒碰上時 { if(isalpha(S[i]))//如果i對應的是字母 { while(j>i)//當i和j還沒碰上時 { if(isalpha(S[j]))//如果j對應的也是字母 { swap(S[i],S[j]);//i和j對應的這兩個字母彼此交換 j--;//j到下一位 break;//跳出循環,不用找j對應的字母了 } j--;//如果不是字母,那麽不斷地找下去 } } i++;//交換完之後,i往前走繼續找下一個字母 } return S;//最後返回“原地”交換完的字符串 }
上述代碼實測0ms,beats 100.00% of cpp submissions。
leetcode-917-僅僅反轉字母