leetcode 345. 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".

Note:
The vowels does not include the letter "y".

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution(object):
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        arr = list(s)
        vows = {"a", "e", "i", "o", "u"}
        i, j = 0, len(arr)-1
        while i<j:
            if arr[i].lower() in vows:
                if arr[j].lower() in vows:
                    arr[i], arr[j] = arr[j], arr[i]                   
                    i += 1
                j -= 1
            else:
                i += 1
        return "".join(arr)

 or

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution(object):
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        arr = list(s)
        vows = {"a", "e", "i", "o", "u"}
        i, j = 0, len(arr)-1
        while i<j:
            if arr[i].lower() in vows:
                while i<j and arr[j].lower() not in vows:
                    j -= 1
                if i == j: break
                arr[i], arr[j] = arr[j], arr[i]                   
                j -= 1
            i += 1
        return "".join(arr)

 or 都用贪心:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution(object):
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        arr = list(s)
        vows = {"a", "e", "i", "o", "u"}
        i, j = 0, len(arr)-1
        while i<j:
            while i<j and arr[i].lower() not in vows:
                i += 1
            while i<j and arr[j].lower() not in vows:
                j -= 1
            if i < j:
                arr[i], arr[j] = arr[j], arr[i]                   
                j -= 1
                i += 1
        return "".join(arr)

 或者是two sum的思路,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution(object):
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        arr = list(s)
        vows = {"a", "e", "i", "o", "u", "A", "E", "I", "O", "U"}
        i, j = 0, len(arr)-1
        while i<j:           
            l, r = arr[i] in vows, arr[j] in vows
            if l and r:               
                arr[i], arr[j] = arr[j], arr[i]                   
                j -= 1
                i += 1
            elif l and not r:
                j -= 1
            elif not l and r:
                i += 1
            else:
                i += 1
                j -= 1
        return "".join(arr)

 此外,还有使用stack存储vows的做法,两次遍历,第一次生成stack,第二次在遇到vows时候直接pop stack里的字符替换掉。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution(object):
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        arr = list(s)
        vows = {"a", "e", "i", "o", "u", "A", "E", "I", "O", "U"}
        stack = []
        for i,c in enumerate(arr):
            if c in vows:
                stack.append(c)
        for i,c in enumerate(arr):
            if c in vows:
                arr[i] = stack.pop()       
        return "".join(arr)

 

posted @   bonelee  阅读(194)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2017-06-20 EM算法——有隐含变量时,极大似然用梯度法搞不定只好来猜隐含变量期望值求max值了
2017-06-20 SVM最通俗的解读
2017-06-20 SVM中的线性分类器
点击右上角即可分享
微信分享提示