前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-917-仅仅反转字母

leetcode-917-仅仅反转字母

作者头像
chenjx85
发布2018-10-15 13:05:02
5530
发布2018-10-15 13:05:02
举报

题目描述:

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

示例 1:

代码语言:javascript
复制
输入:"ab-cd"
输出:"dc-ba"

示例 2:

代码语言:javascript
复制
输入:"a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"

示例 3:

代码语言:javascript
复制
输入:"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、这道题比较容易,定义两个指针,一个从前开始,一个从后开始,当两个指针对应的都是字母时,交换他们。

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

代码如下:(附详解)

代码语言:javascript
复制
    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。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 要完成的函数:
  • 说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档