编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
给定 s = “hello”, 返回 “holle”.
示例 2:
给定 s = “leetcode”, 返回 “leotcede”.
注意:
元音字母不包括 “y”.
解题思路
参照这Leetcode 125:验证回文串、Leetcode 344:验证回文串、Leetcode 167:两数之和 II - 输入有序数组几篇文章中的解题思路
class Solution:
def reverseVowels(self, s):
"""
:type s: str
:rtype: str
"""
vowels = ['a', 'u', 'e', 'i', 'o', 'A', 'U', 'E', 'I', 'O']
l = 0
r = len(s) - 1
s = list(s)
while l < r:
if s[l] not in vowels:
l += 1
continue
if s[r] not in vowels:
r -= 1
continue
s[l], s[r] = s[r], s[l]
l += 1
r -= 1
return ''.join(s)
这个问题还有一种解题思路就是建立一个stack
,遍历s
,将s
中的元音字母
添加到stack
中,然后再遍历一遍s
,这个时候我们如果碰到元音字母
的话,我们就将stack
的尾部元素弹出,将它替换给遍历到的这个元素。
class Solution:
def reverseVowels(self, s):
"""
:type s: str
:rtype: str
"""
stack = list()
vowels = set(['a', 'u', 'e', 'i', 'o', 'A', 'U', 'E', 'I', 'O'])
result = list()
for ch in s:
if ch in vowels:
stack.append(ch)
result.append(ch)
for i, ch in enumerate(result):
if ch in vowels:
result[i] = stack.pop()
return ''.join(result)
一个更pythonic
的写法
class Solution:
def reverseVowels(self, s):
"""
:type s: str
:rtype: str
"""
vowels = set(['a', 'u', 'e', 'i', 'o', 'A', 'U', 'E', 'I', 'O'])
p = [i for i in s if i in vowels]
return ''.join([i if i not in vowels else p.pop() for i in s])
该问题的其他语言版本添加到了我的GitHub Leetcode
如有问题,希望大家指出!!!