345. Reverse Vowels of a String [easy] (Python)

原创 2016年06月01日 14:10:20

题目链接

https://leetcode.com/problems/reverse-vowels-of-a-string/

题目原文

Write a function that takes a string as input and reverse only the vowels of a string.

Example 1:
Given s = “hello”, return “holle”.

Example 2:
Given s = “leetcode”, return “leotcede”.

题目翻译

写一个函数,输入一个字符串,仅将其中的元音字母逆序。
例子1:输入”hello”,输出”holle”;例子2:输入”leetcode”,输出”leotcede”。

思路方法

首先,要知道哪些是元音字母:a, o, e, i, u, A, O, E, I, U.

思路一

一遍扫描所有字符,记录所有元音字母和它们出现的位置到一个数组中;再扫描这个数组,将元音字母逆序填回原来的字符串相应位置。

代码

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

思路二

思路一里面要顺序记录出现的元音字母和位置,但是在第二遍循环时只用考虑记录这些位置上的字母的变化。其实也可以只顺序记录所有的元音字母,第二遍循环重新遍历原始字符串,将遇到的元音字母替换成刚才记录的逆序排列。
如果写的很精简的话,就是下面这样的:

代码

class Solution(object):
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        vowels = re.findall('(?i)[aeiou]', s)
        return re.sub('(?i)[aeiou]', lambda m: vowels.pop(), s)

思路三

维护两个指针分别从字符串头和尾扫描,每次交换两个指针扫到的元音字母,于是只需遍历一遍字符串就可以完成元音字母逆序。

代码

class Solution(object):
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        vowels = {'a': True, 'o': True, 'e': True, 'i': True, 'u': True, 'A': True, 'O': True, 'E': True, 'I': True, 'U': True}
        res = list(s)
        pos = []
        for i in xrange(len(res)):
            if res[i] in vowels:
                pos.append((i, res[i]))
        for j in xrange(len(pos)/2):
            res[pos[j][0]] = pos[len(pos)-j-1][1]
            res[pos[len(pos)-j-1][0]] = pos[j][1]
        return ''.join(res)

PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:http://blog.csdn.net/coder_orz/article/details/51555552

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Leetcode #345. Reverse Vowels of a String 逆转元音字母 解题报告

1 解题思想这道题是逆转字符串的一个变种,要求的只是把元音的部分进行逆转,非元音的地方不进行逆转。所以基本的思想就是: 1、单独的扫描一次元音,得道其序列(我们可以逆序扫描,这样读出的时候直接就是逆...
  • MebiuW
  • MebiuW
  • 2016年05月02日 13:41
  • 593

LeetCode 345. Reverse Vowels of a String 解题报告

LeetCode 345. Reverse Vowels of a String 解题报告

【leetcode】345. Reverse Vowels of a String

一、题目描述 Write a function that takes a string as input and reverse only the vowels of a string. Exa...

leetcode 345 Reverse Vowels of a String

leetcode345 ---- 翻转字符串中的元音。 解法1:刚开始用最基本的方法:直接去比较s中的每一个字符与元音是否一样,如果一样的话判断为 元音。然后设置前后两个下标,如果都为元音字符则交换。...

LeetCode-345. Reverse Vowels of a String

DescriptionWrite a function that takes a string as input and reverse only the vowels of a string.Exa...

leetcode_345 Reverse Vowels of a String

题目分析:给定一个字符串,把字符串中的元音字符转置 解题思路:1)定义两个指标i,j,分别指向字符串最前端和字符串最尾端;2)遍历字符串,判断字符串中对应位置字符是否为元音字符,如果是元音字符,停止遍...

【Leetcode】345. Reverse Vowels of a String

方法一: 思路: public class Solution { public String reverseVowels(String s) { StringBuilder s...

LeetCode 345. Reverse Vowels of a String

345. Reverse Vowels of a StringWrite a function that takes a string as input and reverse only the vo...

LeetCode 345 Reverse Vowels of a String (in java)

Write a function that takes a string as input and reverse only the vowels of a string. Example ...

LeetCode - 345. Reverse Vowels of a String

和前面Reverse String的思想是一样的,同样是需要维护两个指针,一个在开头,一个在结尾,如果遇到元音字母就互相交换它们。注意这里判断原因字母的方法,使用了一个String vowel:  "...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:345. Reverse Vowels of a String [easy] (Python)
举报原因:
原因补充:

(最多只允许输入30个字)