乐于分享
好东西不私藏

TV版APP:小白云盘TV播放视频顺序不对怎么办?

TV版APP:小白云盘TV播放视频顺序不对怎么办?

楔子

大家好,我是张桃狮。

五一假期,我在家刷剧。

我用的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)。

还是双指针思路,另外一种写法。

我是个编程爱好者,小白级别的,如果你跟我一样希望通过力扣刷题,学习各种奇妙的算法,可以关注我,大家一起学习。