• leetcode-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!"
    

     

    提示:

    1. S.length <= 100
    2. 33 <= S[i].ASCIIcode <= 122 
    3. S 中不包含  or "

     

    要完成的函数:

    string reverseOnlyLetters(string S) 

    说明:

    1、给定一个字符串S,里面存放着字母(有大写有小写),和一些非字母符号。

    现在要求将字符串中的字母反转,而非字母字符则停留在原地不做任何改变。

    比如a-bcd,反转完应该是d-cba。

    最后返回反转后得到的字符串。

    2、这道题比较容易,定义两个指针,一个从前开始,一个从后开始,当两个指针对应的都是字母时,交换他们。

    接着前面的指针往后走,后面的指针往前走,不断交换,直到两个指针到达同一个位置。

    代码如下:(附详解)

        string reverseOnlyLetters(string S) 
        {
            int i=0,s1=S.size(),j=s1-1;
            while(i<j)//当i和j还没碰上时
            {
                if(isalpha(S[i]))//如果i对应的是字母
                {
                    while(j>i)//当i和j还没碰上时
                    {
                        if(isalpha(S[j]))//如果j对应的也是字母
                        {
                            swap(S[i],S[j]);//i和j对应的这两个字母彼此交换
                            j--;//j到下一位
                            break;//跳出循环,不用找j对应的字母了
                        }
                        j--;//如果不是字母,那么不断地找下去
                    }
                }
                i++;//交换完之后,i往前走继续找下一个字母
            }
            return S;//最后返回“原地”交换完的字符串
        }
    

    上述代码实测0ms,beats 100.00% of cpp submissions。

  • 相关阅读:
    [转]如何避免外发邮件被误判为垃圾邮件
    [转]php判断一个数组是另一个数组的子集
    [转]Linux下Nagios的安装与配置
    [转]MySQL事务学习-->隔离级别
    [转]最完美解决Nginx部署ThinkPHP项目的办法
    [转]Redis作者:深度剖析Redis持久化
    Html、Asp、Php、Jsp禁止页面缓存
    JS模板引擎
    HTTPS安全证书介绍
    PHP Curl实例
  • 原文地址:https://www.cnblogs.com/chenjx85/p/9783438.html
Copyright © 2020-2023  润新知