跳转至

917. 仅仅反转字母

难度:简单

题目

给定一个字符串 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 "

Reference

题解

和反转字符串使用相同的思路,只需加上对当前字符的判断即可。

bool isChar(char *s)
{
    return (*s >= 'a' && *s <= 'z') || (*s >= 'A' && *s <= 'Z');
}
char * reverseOnlyLetters(char * S) {
    int len = strlen(S);
    char *head = S, *tail = S + len - 1, temp;
    while (tail > head)
    {
        while (!isChar(head) && head < tail)
            head++;
        while (!isChar(tail) && head < tail)
            tail--;
        temp = *head;
        *head = *tail;
        *tail = temp;
        head++;
        tail--;
    }
    return S;
}

评论