【LeetCode刷题】:仅仅反转字母(双指针+字符串)

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

方法:双指针

思路与算法

我们使用 left 指针从左边开始扫描字符串 s,right 指针从右边开始扫描字符串 s如果两个指针都扫描到字母,且 left<right,那么交换 s[left] 和 s[right],然后继续进行扫描;否则表明反转过程结束,返回处理后的字符串

代码

cpp 复制代码
void Swap(char*c1,char*c2)
{
    char tmp=*c1;
    *c1=*c2;
    *c2=tmp;
}

char * reverseOnlyLetters(char * s){
    int SLength=strlen(s);
    int left=0;
    int right =SLength-1;
    while(true)
    {
        while(left<right&&!isalpha(s[left]))
        {
            left++;
        }
        while(right>left&&!isalpha(s[right]))
        {
            right--;
        }
        if(left>=right)
        {
            break;
        }
        Swap(s+left,s+right);
        left++;
        right--;
    }
    return s;
}
相关推荐
mmz12074 小时前
深度优先搜索DFS(c++)
c++·算法·深度优先
爱编码的小八嘎4 小时前
c.语言完美演绎6-22
c语言
汀、人工智能5 小时前
[特殊字符] 第103课:单词搜索II
数据结构·算法·均值算法·前缀树·trie·单词搜索ii
wanderist.5 小时前
算法模板-字符串
数据结构·算法·哈希算法
xiaoye-duck5 小时前
《算法题讲解指南:动态规划算法--子序列问题》--29.最长递增子序列的个数,30.最长数对链,31.最长定差子序列
c++·算法·动态规划
Yzzz-F6 小时前
Problem - 2180D - Codeforces
算法
moonsea02036 小时前
2023.9.25
算法
汀、人工智能6 小时前
[特殊字符] Python基础语法速成教程
算法·链表·均值算法·哈希表·lru缓存·python基础语法速成教程
tankeven6 小时前
HJ164 太阳系DISCO
c++·算法
来自远方的老作者6 小时前
第7章 运算符-7.1 算术运算符
开发语言·数据结构·python·算法·算术运算符