zoukankan      html  css  js  c++  java
  • 917,仅仅反转字母(简单)

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

    示例 1:

    输入:"ab-cd"
    输出:"dc-ba"
    示例 2:

    输入:"a-bC-dEf-ghIj"
    输出:"j-Ih-gfE-dCba"

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/reverse-only-letters
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    普通方法:

    由题意得知这是一个操作字符串的题目。

      关于字符串,python有python自己的方法,如判断是否为字母的isalpha(),而排除语言,其他语言可以通过ASCLL码的次序,A-Z是65-90,a-z是97-122。

      那么回归本题,不考虑空间复杂度,最简单的方法就是

      1,另起一个字符串,

      2,for循环字符串,将字符串中字母添加到新字符串中。

      3,将新字符串反转,替换原来的字符串中字母部分,长度应该是一样的。

    代码如下:

    class Solution:
        def reverseOnlyLetters(self, S):
            str1 = ''
            for i in S:
                if i.isalpha():
                    str1 += i
            str1 = str1[::-1]
            str2 = ''
            count = 0
            for i in range(len(S)):
                if S[i].isalpha():
                    str2 += str1[count]
                    count +=1
                else:
                    str2 += S[i]
            return str2

      结果也是一样。

    提交时间提交结果执行用时内存消耗语言
    7 天前 通过 48 ms 13.8 MB Python3

    双指针法:

      1。定义两个指针,一个指向字符串头,一个指向字符串尾。

      2。首指针每当遇到字母时:

        1.查看尾指针是否时字母,是则交换,

        2.不是则尾指针向前移。

      3.返回该字符串。

    代码:

        def reverseOnlyLetters1(self, S):
            first_t = 0
            end_t = len(S)-1
            while first_t < end_t:
                if S[first_t].isalpha():
                    if S[end_t].isalpha():
    
                        S[first_t],S[end_t] = S[end_t],S[first_t]
                        first_t += 1
                        end_t -= 1
                    else:
                        end_t -= 1
                else:
                    first_t += 1
            return S

      然而忽略了一个重点,python中字符串是不可修改类型,所以这道题目的空间复杂度是不能降了,如果是c语言的应该可以。

      那么,解决方案就是,将字符串改成列表,操作完了再变回去:

        def reverseOnlyLetters1(self, S):
            first_t = 0
            end_t = len(S)-1
            S1 = list(S)
            while first_t < end_t:
                if S1[first_t].isalpha():
                    if S1[end_t].isalpha():
                        S1[first_t],S1[end_t] = S1[end_t],S1[first_t]
                        first_t += 1
                        end_t -= 1
                    else:
                        end_t -= 1
                else:
                    first_t += 1
            return ''.join(S1)

      执行时间和消耗内存是一样的。

  • 相关阅读:
    PHP根据蜘蛛和设备进行适配不同界面
    destoon7.0招商地区聚合推送
    Destoon7.0产品栏目地区聚合推送插件
    Destoon7.0百度批量循环推送至百度
    PHP 实现随机图像功能
    PHP中$_SERVER参数用法总结
    关于destoon后台添加自定义功能+前台展示标签调用方法
    分类地区批量推送熊掌号+主动推送代码
    SpringMVC-SimpleDEMO
    SpringMVC工作流程
  • 原文地址:https://www.cnblogs.com/LZXlzmmddtm/p/11385076.html
Copyright © 2011-2022 走看看