
楔子
大家好,我是张桃狮。
五一假期,我在家刷剧。
我用的app是小白云盘TV,可以在线观看夸克网盘中的影视剧。
可是我发现,有时候小白云盘TV长时间播放视频会突然无声,重新打开视频会黑屏。
我不知道是什么原因导致的,但是我发现只要切换视频音轨,问题往往可以解决。
当然这有一个前提,使用原画画质才能选择音轨。
另外我还发现,有时候小白云盘TV的文件名排序明明是正确的,播放的时候顺序却是乱的。

经过观察发现,播放顺序出现问题的文件名前面都有类似空格的不可见字符。
只要将这些文件名开头的不可见字符删除,问题就解决了。
我尝试在手机端的夸克app中删除这些不可见字符,结果发现没有批量重命名功能,只能一个一个删除。
这点就不如115网盘了,115网盘批量重命名文件很方便。
另外在手机端夸克app中播放视频,是没有排序问题的。
看来小白云盘TV的播放列表排序还需要改进呀。
闲话讲完,咱们继续力扣刷题。
力扣345. 反转字符串中的元音字母
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现不止一次。
示例 1:
输入:s = "IceCreAm"
输出:"AceCreIm"
解释:
s 中的元音是 ['I', 'e', 'e', 'A']。反转这些元音,s 变为 "AceCreIm".
示例 2:
输入:s = "leetcode"
输出:"leotcede"
提示:
1 <= s.length <= 3 *
s 由 可打印的 ASCII 字符组成
我的思路
新建一个集合,将'a'、'e'、'i'、'o'、'u'的大小写元音字母都加进去。
vowels_set = set('aeiouAEIOU')
循环字符串s,将元音字母提取出来组成一个新列表。
反转这个列表。
再次循环字符串s,将所有元音字母替换进去。
class Solution: def reverseVowels(self, s: str) -> str: vowels_set = set('aeiouAEIOU') vowels_list = list() for c in s: if c in vowels_set: vowels_list.append(c) vowels_list.reverse() j=0 s_lst=list(s) for i in range(len(s)): if s[i] in vowels_set: s_lst[i]=vowels_list[j] j += 1 return "".join(s_lst)力扣提交通过,时间复杂度O(n),空间复杂度O(n)。
我忽然想到可以可以用双指针,一个从头向后走,一个从后向前走。
class Solution: def reverseVowels(self, s: str) -> str: vowels_set = set('aeiouAEIOU') s_list=[c for c in s] k=len(s)-1 for i in range(len(s)): if s[i] in vowels_set: if i >= k: break for j in range(k,-1,-1): if s[j] in vowels_set: s_list[i],s_list[j]=s_list[j],s_list[i] k = j-1 break return "".join(s_list) 力扣提交通过,时间复杂度O(n),空间复杂度O(n)。
复杂度没变化,还是看官方题解吧。
力扣官方题解
class Solution: def reverseVowels(self, s: str) -> str: def isVowel(ch: str) -> bool: return ch in "aeiouAEIOU" n = len(s) s = list(s) i, j = 0, n - 1 while i < j: while i < n and not isVowel(s[i]): i += 1 while j > 0 and not isVowel(s[j]): j -= 1 if i < j: s[i], s[j] = s[j], s[i] i += 1 j -= 1 return "".join(s)力扣提交通过,时间复杂度O(n),空间复杂度O(n)。
思路与我的基本一样,不过力扣官方的双指针代码只需要循环一次。
力扣网友Shawxing精讲算法的代码
class Solution: def reverseVowels(self, s: str) -> str: l, r = 0, len(s) - 1 chars = list(s) vowels = set('aeiouAEIOU') while l < r: if s[l] not in vowels: l += 1 elif s[r] not in vowels: r -= 1 else: chars[l], chars[r] = chars[r], chars[l] l += 1 r -= 1 return ''.join(chars)力扣提交通过,时间复杂度O(n),空间复杂度O(n)。
还是双指针思路,另外一种写法。
我是个编程爱好者,小白级别的,如果你跟我一样希望通过力扣刷题,学习各种奇妙的算法,可以关注我,大家一起学习。
夜雨聆风