zoukankan      html  css  js  c++  java
  • 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),因此尽量使用哈希表或者字典,避免使用列表。

  • 相关阅读:
    matlab练习程序(径向模糊1)
    matlab练习程序(摄像头获取数据)
    jpg转bmp(使用libjpeg)
    matlab练习程序(图像放大/缩小,双线性插值)
    一维最大子数组
    二分查找
    图像处理时用的卷积函数
    matlab练习程序(摄像头视频中截图)
    bmp24位彩色图像转8位灰度图像(纯C++)
    C#中值类型、引用类型 再次理解
  • 原文地址:https://www.cnblogs.com/rounie/p/13494379.html
Copyright © 2011-2022 走看看