当前位置 博文首页 > 文章内容

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

    作者: 栏目:未分类 时间:2020-08-13 9:02:35

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    题目描述:

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

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