917. 仅仅反转字母-双指针法
给你一个字符串 s ,根据下述规则反转字符串:
所有非英文字母保留在原有位置。
所有英文字母(小写或大写)位置反转。
返回反转后的 s 。
示例 1:
输入:s = “ab-cd”
输出:“dc-ba”
示例 2:
输入:s = “a-bC-dEf-ghIj”
输出:“j-Ih-gfE-dCba”
示例 3:
输入:s = “Test1ng-Leet=code-Q!”
输出:“Qedo1ct-eeLg=ntse-T!”
这题,我们实用双向指针就ok了,非常好的解法:
char * reverseOnlyLetters(char * s){
int len=strlen(s);
int low=0;
int high=len-1;
while(low<high){
while(low<high){
if((s[low]>='a'&&s[low]<='z')||(s[low]>='A'&&s[low]<='Z')){
break;
}
low++;
}
while(low<high){
if((s[high]>='a'&&s[high]<='z')||(s[high]>='A'&&s[high]<='Z')){
break;
}
high--;
}
char ch=s[low];
s[low]=s[high];
s[high]=ch;
low++;
high--;
}
return s;
}