反转字符串&反转字符串中的元音字母
解题思路
因为在 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)