【LeetCode】345. 反转字符串中的元音字母

548 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

四月的假期,宅在家继续学习。接下来我们按不同类型的题进行逐一攻克,本月开始对字符串相关的题开始刷起来~~~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 本题给出一个字符串s。长度在(1,3 * 105)
    • 要求对字符串s的元音字母进行反转交换位置。
    • 元音字母包含a,e,i,o,u,A,E,I,O,U

二、思路分析:

我们拿到本题,题目很贴心地提供出了五个元音字母,同时包含其大写字母。不然,对于元音字母,我们得去网上重新学习一下英语的那些知识了。

相信大家刚开始看了示列,没看懂字符串是怎么交换的。沉下心,我们重新理一下思路。

  • 使用一前一后的双指针分别指向字符串首尾位置
  • 由于字符串是不可变数据类型,则需要转化成列表list(s)进行交换元音字母.
  • 当遍历的s[left]与s[right]都是元音字母时,则进行交换,left+1,right➖1
  • 当s[left] 不是元音字母,则left+1
  • 当s[right] 不是元音字母,则right-1

image.png

image.png

class Solution(object):
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """

        vowels = ["a","e","i","o","u","A","E","I","O","U"]

        left = 0
        right = len(s)-1
        s_list = list(s)
        tmp = ""

        while left < right:

            if s[left] in vowels and s[right] in vowels:

                tmp = s_list[left]
                s_list[left] = s_list[right]
                s_list[right] = tmp
                left +=1
                right -=1                
            if s[left] not in vowels:
                left +=1
            if s[right] not in vowels:
                right -=1
            
        return "".join(s_list)

三、总结:

本期我们使用一前一后的双指针对字符串进行遍历比较,AC记录如下:

image.png

时间复杂度O(N),空间复杂度O(N)

以上是本期内容,欢迎大佬们点赞评论,下期见~~