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) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.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中的线性分类器