给你一个字符串 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!"
解答
bool is_letters(char *c)
{
if ((*c >= 'a' && *c <= 'z') || (*c >= 'A' && *c <= 'Z'))
return false;
else
return true;
}
static inline void swap(char *q, char *p)
{
char t;
t = *p;
*p = *q;
*q = t;
}
char * reverseOnlyLetters(char * s){
int left = 0, right = strlen(s) - 1;
while (true) {
while (left <= right && is_letters(s + left)) {
left++;
}
while (left <= right && is_letters(s + right)) {
right--;
}
if (left > right) {
break;
}
swap(s + left, s + right);
left++;
right--;
}
return s;
}