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。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Deep learning进阶路

C++随记(五)---const 与 指针

C++随记(五)---const 与 指针 const 限定符它把一个对象转换成一个常量,const与define。两者都可以用来定义常量,但是const定...

19400
来自专栏十月梦想

php内建函数

strpos(变量名,'包含字符')判断变量中字符首次出现的位置,返回值数字,第一位为0

15240
来自专栏静晴轩

59分钟学会正则表达式

推荐几个正则表达式编辑器 Debuggex PyRegex Regexper 正则表达式是一种查找以及字符串替换操作。正则表达式在文本编辑器中广泛使用,比如正则...

43960
来自专栏IT可乐

Java的深拷贝和浅拷贝

  关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象。可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷...

42760
来自专栏老九学堂

最新Java高薪面试题+答案+解析!

今天老九君给大家分享一些Java面试需要的题目哟~ 01 anonymousinnerclass(匿名内部类)是否可以extends(继承)其它类,是否可以im...

47470
来自专栏Python爱好者

Java基础笔记07

13730
来自专栏云瓣

正则&highlight高亮实现(干货)

写完正则表达式以后在浏览器上检测实在是不方便,于是就写了一个JS正则小工具,大大地提高了学习效率。学习之余用正则实现了一个highlight高亮demo,欢迎交...

389120
来自专栏Vamei实验室

Python进阶07 函数对象

秉承着一切皆对象的理念,我们再次回头来看函数(function)。函数也是一个对象,具有属性(可以使用dir()查询)。作为对象,它还可以赋值给其它对象名,或者...

25760
来自专栏个人随笔

房上的猫:类的无参方法

一.类的无参方法  1.概述:   (1)类是由一组具有相同属性和共同行为的实体抽象而来的   (2)对象执行的操作是通过编写类的方法实现的   (3)类的每一...

388130
来自专栏前端知识分享

第184天:js创建对象的几种方式总结

javascript 创建对象简单的来说,无非就是使用内置对象或各种自定义对象,当然还可以使用JSON,但写法有很多,也能混合使用。

12830

扫码关注云+社区

领取腾讯云代金券