Write a function that takes a string as input and reverse only the vowels of a string.

Example 1:
Given s = “hello”, return “holle”.

Example 2:
Given s = “leetcode”, return “leotcede”.

Note:
The vowels does not include the letter “y”.

思路

题目要求我们将一个字符串其中的元音翻转位置。

可以利用双指针的方式,两头的指针分别访问到一个元音,调换一下两个元音之间的位置。

也可以利用哈希表来进行操作,我们需要记住元音在字符串的相应位置,之后再利用哈希表生成元音对应位置的数组,交换顺序即可。下面的代码就是基于哈希表的。

注意python当中反向遍历可以直接利用切片的方法来进行。如list[::-1]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution(object):
def reverseVowels(self, s):
"""
:type s: str
:rtype: str
"""
vlist = ['a','e','i','o','u','A','E','I','O','U']
vmap = {}
for pos, i in enumerate(s):
if ( i in vlist ):
vmap[pos] = str(i)
index = vmap.keys()
length = len(index)
index.sort()
value = []
for k in index:
value.append(vmap[k])
slist = list(s)
for i in range(length):
slist[index[i]] = value[length-i-1]
s = ''.join(slist)
return s

参考资料:

http://www.cnblogs.com/linyawen/archive/2012/03/15/2398292.html