[leetcode]Python实现-345.反转字符串中的元音字母

匿名 (未验证) 提交于 2019-12-02 22:54:36

描述

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

示例

给定 s = “hello”, 返回 “holle”.
给定 s = “leetcode”, 返回 “leotcede”.
元音字母不包括 “y”.

思路:元音字母a,o,i,e,u。首先按序找出字符串中的元音字母,记录下索引值存放在列表index_list中,然后进行倒叙。

class Solution:     def reverseVowels(self, s):         """         :type s: str         :rtype: str         """         l = ['a','o','e','u','i','A','O','E','U','I']         res = list(s)         index_list = []         for i in range(len(res)):             if res[i] in l:                 index_list.append(i)         length = len(index_list)         for j in range(length//2):             res[index_list[j]], res[index_list[-j-1]] = res[index_list[-j-1]], res[index_list[j]]         print(index_list)         return ''.join(res)

看看别人的思路

class Solution:     def reverseVowels(self, s):         """         :type s: str         :rtype: str         """          vowels = 'aeiouAEIOU'  #         tmps = []  #         res = ''  #         for i in s: #             if i in vowels: #                 tmps.append(i)  #         for i in s: #             if i in vowels: #                 res += tmps.pop() #             else: #                 res += i  #         return res          i, j = 0, len(s) - 1          list1 = list(s)          while i < j:             if s[j] not in vowels:                 j -= 1             elif s[i] not in vowels:                 i += 1             else:                 list1[i], list1[j] = list1[j], list1[i]                 i += 1                 j -= 1          return ''.join(list1)

使用两个指针i和j,分别从头尾便利字符串,当i,j遇到非原音字母时继续遍历,若其中一个遇到元音字母后则在原地等待另一个指针遍历都元音字母,然后两者元素进行交换。继续下一次遍历,直到两个指针相遇停止。思路很好。
还有另外一种思路:首先遍历一边字符串,将元音字母依次入栈。然后将字符串转为列表,遍历列表的时候遇到元音字母则出栈,将栈顶元素赋给当前位置。

class Solution:     def reverseVowels(self, s):         """         :type s: str         :rtype: str         """         temp = []         for v in s:             if (v in "aeiouAEIOU"):                 temp.append(v)          res = ""         for i in range(len(s)):             if (s[i] in "aeiouAEIOU"):                 res += temp.pop()             else:                 res += s[i]          return res

算上我的共三种方法,第二种效率最高,第三种次之。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!