leetcode344&345之反转字符串中的元音字母

题目描述:

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例 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),因此尽量使用哈希表或者字典,避免使用列表。

 

上一篇:Q_OBJECT提供了信号槽机制、国际化机、RTTI 的反射能力(cpp中使用Q_OBJECT导致无法处理moc,就需要#include “moc_xxx.h”)


下一篇:Python报错 “UnicodeDecodeError: ‘gb2312’ codec can’t decode byte 0xa4 in position… : illegal multibyte