反转字符串&反转字符串中的元音字母

 

解题思路
因为在 Python 中字符串是不可变,因此遍历字符串交换每个单词内字符位置的方法不太可行,但是利用 Python 切片的便利,可以写出更优雅的实现方式。

1、常规思路

将字符串分割成单词列表 然后把每个单词反转切片

使用for循环遍历

class Solution:
    def reverseWords(self, s: str) -> str:
        return " ".join(word[::-1] for word in s.split(" "))

 

 

class Solution:
    def reverseWords(self, s: str) -> str:
        # 先反转单词列表,再反转字符串
        return " ".join(s.split(" ")[::-1])[::-1]

class Solution(object):
    def reverseWords(self, s):
         return " ".join(s[::-1].split(" ")[::-1])

  

 

 

 

 思路一:

class Solution:
    def reverseWords(self, s: str) -> str:
        s = s.strip()
        # 反转整个字符串
        s_arr = s[::-1].split(" ")
        s_reverse = []
        for word in s_arr:
            if word != '':
                s_reverse.append(word[::-1])
        return " ".join(s_reverse)

思路二:

class Solution:
    def reverseWords(self, s: str) -> str:
       return " ".join(reversed(s.split()))

  

 

 

 双指针解法:

class Solution:
    def reverseVowels(self, s: str) -> str:
        vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}
        left = 0
        right = len(s) - 1
        # str类型数据无法直接查询in和not in, 需要转换成list类型
        s_lyst = list(s)
        print(s_lyst)
        while left < right:
            if s_lyst[left] in vowels and s_lyst[right] in vowels:
                # 交换位置
                s_lyst[left], s_lyst[right] = s_lyst[right], s_lyst[left]
                left += 1
                right -= 1
            if s_lyst[left] not in vowels:
                left += 1
            if s_lyst[right] not in vowels:
                right -= 1

        return ("").join(s_lyst)

  

posted @ 2020-06-02 10:43  GumpYan  阅读(374)  评论(0编辑  收藏  举报