题目描述:
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello"
输出: "holle"
示例 2:
输入: "leetcode"
输出: "leotcede"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-vowels-of-a-string
代码实现:
1 def reverseString(s): 2 ''' 3 反转列表中字符串 4 :param s: 5 :return: 6 ''' 7 left, right = 0, len(s) - 1 8 while left < right: 9 s[left], s[right] = s[right], s[left] 10 left += 1 11 right -= 1 12 13 14 print("--------测试reverseString()---------") 15 s = ["h", "e", "l", "l", "o"] 16 reverseString(s) 17 print(s) 18 19 20 def reverseaeiou(s): 21 ''' 22 反转字符串中的原因字母 23 :param s: 24 :return: 25 ''' 26 aeiou = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'} 27 left, right = 0, len(s) - 1 28 s = list(s) 29 print(s) 30 while left < right: 31 if s[left] in aeiou and s[right] in aeiou: 32 s[left], s[right] = s[right], s[left] 33 left += 1 34 right -= 1 35 elif s[left] in aeiou: 36 if s[right] not in aeiou: 37 right -= 1 38 elif s[right] in aeiou: 39 if s[left] not in aeiou: 40 left += 1 41 else: 42 left += 1 43 right -= 1 44 return "".join(s) 45 46 47 print("--------测试reerseaeiou()--------") 48 s = "aA" 49 res = reverseaeiou(s) 50 print(type(res)) 51 print(res) 52 53 54 def reverseaeiou1(s): 55 aeiou = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] 56 left, right = 0, len(s) - 1 57 s = list(s) 58 while left < right: 59 if s[left] in aeiou: 60 if s[right] in aeiou: 61 s[left], s[right] = s[right], s[left] 62 left += 1 63 right -= 1 64 else: 65 right -= 1 66 else: 67 if s[right] in aeiou: 68 left += 1 69 else: 70 left += 1 71 right -= 1 72 73 return "".join(s) 74 75 76 print("--------测试reerseaeiou1()--------") 77 s = "aA" 78 res = reverseaeiou1(s) 79 print(res)
总结:反转列表中字符串,采用双指针即可。或者使用reverse函数也可,此操作在原列表上进行。
对反转字符串需要注意的几点:
第一、反转string类型字符串,因为在python中,字符串一旦创建,就不能通过索引来赋值,因为要交换元音字母,最终修改后返回的必为新的对象,而不是原字符串(因为原字符串不能修改)。
第二、在python中,哈希表和字典的搜索时间复杂度为O(1),而列表的搜索时间复杂度为O(N),因此尽量使用哈希表或者字典,避免使用列表。