LeetCode解题 Day14

917. Reverse Only Letters

https://leetcode.com/problems/reverse-only-letters/


题目解释

你会能到一个字串s ,请按照下列规则并回传反转的字串

  • 所有的非英文字元要留在原本位置
  • 所有的英文字母要反转

example

https://i.imgur.com/ugUgcHQ.png


解法

这题只要知道哪个字元是英文字母和要转去哪而已

比较常见的方法有两种:

1. Two pointer

前後都个放一个指标,一个由前往後、另一个由後往前

就样就能马上知道前面的字母要放到哪个位置了

class Solution:
    def reverseOnlyLetters(self, s: str) -> str:
        
        ans = [i for i in s]
        p = 0
        q = len(s) - 1
        
        while p < q:
            
            if ans[p].isalpha() and ans[q].isalpha():
                ans[p], ans[q] = ans[q], ans[p] #swap
                p += 1
                q -= 1
            
            elif not ans[p].isalpha():
                p += 1 
            
            elif not ans[q].isalpha():
                q -=1
                
        return ''.join(ans)

2. Stack

先把所有英文字母用堆叠存起来,而堆叠取出的方式是後进先出,也就是取出的过程正好就是反转的顺序

class Solution:
    def reverseOnlyLetters(self, s: str) -> str:
        
        letter = [i for i in s if i.isalpha()]
        
        ans = []
        
        for i in s:
            if i.isalpha():
                ans.append(letter.pop())
            else:
                ans.append(i)
        
        return ''.join(ans)

闲聊

过两周了 耶!


<<:  D13: 工程师太师了: 第7话

>>:  尺寸单位 px、em、rem

程序进化论:一行表达式 Single-expression functions

「学姐,你今天发生什麽事了吗?」 「嗯⋯⋯」唯心没有马上回应诗忆的问题。 「是不是太累了?其实剩下的...

【Day 07】- 第一只网路爬虫要用什麽函式库? (Requests)

前情提要 前一篇文章带大家看了chrome 开发工具的使用,并向下又说明了 Element 、Net...

轻松小单元 - 常见问题

假日就是要轻松 这个篇章整理了技服中心里的问答,包括专区的常见问题、开办研讨会的问答等,还有实作时碰...

Day 5 - 虚拟机配置&实体手机测试

补充 因为昨天忘了讲,今天先补充一下。 如果你觉得前几代的iphone不是全萤幕很丑的话,是可以换的...

D3JsDay05Bar拉BarBarBar,作伙来画吧—画个bar chart长条图

用D3绘制长条图 我们现在可以尝试着用已经学到的SVG来画长条图,只不过是透过D3Js的操作来新增S...