一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
四月的假期,宅在家继续学习。接下来我们按不同类型的题进行逐一攻克,本月开始对字符串相关的题开始刷起来~~~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出一个字符串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
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记录如下:
时间复杂度O(N),空间复杂度O(N)
以上是本期内容,欢迎大佬们点赞评论,下期见~~