给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。

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

2.代码展示

char * reverseOnlyLetters(char * S)
{  
    int right =strlen(S)-1;
    int left =0;
    while (left<right)
    {   int flag1 = 0,flag=0;
        if (S[left]>='a'&&S[left]<='z'||S[left]>='A'&&S[left]<='Z')
        {  
             flag1 = 1;
        }
        else
        {   
            ++left;
        }
         if (S[right]>='a'&&S[right]<='z'||S[right]>='A'&&S[right]<='Z')
        {   
            flag=1;
        }
        else
        {  
            --right;
        }
        if (flag && flag1)
        {
            char tmp = S[left];
            S[left] =S[right];
            S[right] = tmp;
            ++left;
            --right;
        }
    }
    return S;
}

3.解题思路
双指针从两侧开始遍历,设置两个标志,当两个标志都存在时,进行交换,当符合要求时将标志赋值为1,不符合时,指针后移动或者前移动,循环结束跳出,最后返回首地址。

发布了79 篇原创文章 · 获赞 6 · 访问量 3806

猜你喜欢

转载自blog.csdn.net/qq_41152046/article/details/104522355