首页 > 其他 > 详细

仅仅反转字母

时间:2020-06-04 21:34:03      阅读:50      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 遇到出入顺序的问题,可以用栈

方法 1:字母栈
想法和算法

将 s 中的所有字母单独存入栈中,所以出栈等价于对字母反序操作。(或者,可以用数组存储字母并反序数组。)

然后,遍历 s 的所有字符,如果是字母我们就选择栈顶元素输出。

class Solution:
    def reverseOnlyLetters(self, S: str) -> str:
        # 使用字母栈
        letters = [c for c in S if c.isalpha()]
        ans = []
        print(letters)
        for c in S:
            if c.isalpha():
                ans.append(letters.pop())
            else:
                ans.append(c)
        return "".join(ans)

 

方法 2:反转指针
想法

一个接一个输出 s 的所有字符。当遇到一个字母时,我们希望找到逆序遍历字符串的下一个字母。

所以我们这么做:维护一个指针 j 从后往前遍历字符串,当需要字母时就使用它。

 

class Solution:
    def reverseOnlyLetters(self, S: str) -> str:
        # 反转指针
        ans = []
        j = len(S) - 1
        for i, x in enumerate(S):
            if x.isalpha():
                while not S[j].isalpha():
                    j -= 1
                ans.append(S[j])
                j -= 1
            else:
                ans.append(x)
        return ‘‘.join(ans)

  

仅仅反转字母

原文:https://www.cnblogs.com/GumpYan/p/13045600.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!