给定一个字符串 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 "
C
char* reverseOnlyLetters(char* S)
{
int n=strlen(S);
int* temp=(int*)malloc(sizeof(int)*n);
int m=0;
char k;
for(int i=0;i<n;i++)
{
if((S[i]>='a' && S[i]<='z') || (S[i]>='A' && S[i]<='Z'))
{
temp[m++]=i;
}
}
for(int i=0;i<m/2;i++)
{
k=S[temp[i]];
S[temp[i]]=S[temp[m-1-i]];
S[temp[m-1-i]]=k;
}
return S;
}
C++
class Solution {
public:
string reverseOnlyLetters(string S)
{
vector<int> temp;
int n=S.length();
for(int i=0;i<n;i++)
{
if((S[i]>='a' && S[i]<='z') || (S[i]>='A' && S[i]<='Z'))
{
temp.push_back(i);
}
}
int m=temp.size();
char k;
for(int i=0;i<m/2;i++)
{
k=S[temp[i]];
S[temp[i]]=S[temp[m-1-i]];
S[temp[m-1-i]]=k;
}
return S;
}
};
python
class Solution:
def reverseOnlyLetters(self, S):
"""
:type S: str
:rtype: str
"""
n=len(S)
temp=[]
SS=list(S)
for i in range(0,n):
if S[i]>='a' and S[i]<='z' or S[i]>='A' and S[i]<='Z':
temp.append(i)
m=len(temp)
for i in range(0,m//2):
k=S[temp[i]]
SS[temp[i]]=S[temp[m-1-i]]
SS[temp[m-1-i]]=k
return ''.join(SS)