反转字符串中的元音字母

我想请问这道“反转字符串中的元音字母”,以下代码为什么总返回原单词而不是反转后的单词?

class Solution:
    def reverseVowels(self, s: str) -> str:
        s = [s]
        i = 0
        j = len(s)-1
        vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}

        while i < j:
            if s[i] in vowels and s[j] in vowels:
                s[i], s[j] = s[j], s[i]
                i += 1
                j -= 1
            if s[i] not in vowels:
                i += 1
            if s[j] not in vowels:
                j -= 1

        return ''.join(s)

你第三行代码s = [s]等价于s = [s, ]。也就是说,如果入例值为"1a2e3i4o5u",则s = ["1a2e3i4o5u", ],所以j的值为0,你的while i < j:永远走不进去。

把第三行代码改为s = list(s) 就可以了

class Solution:
    def reverseVowels(self, s: str) -> str:
        i = 0
        j = len(s)-1
        s = list(map(str, s)) #这里!!!
        vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}
 
        while i < j:
            if s[i] in vowels and s[j] in vowels:
                s[i], s[j] = s[j], s[i]
                i += 1
                j -= 1
            if s[i] not in vowels:
                i += 1
            if s[j] not in vowels:
                j -= 1
 
        return ''.join(s)
s = Solution()
print(s.reverseVowels("wawbe"))

问题点: 反转字符串中的元音字母不生效
分析思路: 第三行代码, 变量s转换成列表的方式错误
修改代码为:

        s = list(s)
        print(s) # ['w', 'a', 'w', 'b', 'e']
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^