问题描述
给定一个字符串 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"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-only-letters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
执行结果
代码描述
思路:利用双指针,一个从头开始,一个从尾开始,遇到非字符跳过,当两个都为字母时,进行交换,同时移动两个指针。
class Solution {
public:
string reverseOnlyLetters(string S) {
if(S.size() < 2) return S;
int i = 0, j = S.size()-1;
while(i < j)
{
if(!isalpha(S[i]))
++i;
if(!isalpha(S[j]))
--j;
if(i < j && isalpha(S[i]) && isalpha(S[j]))
{
swap(S[i], S[j]);
++i;
--j;
}
}
return S;
}
};