345.反转字符串中的元音字母
题目描述
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 ‘a’、’e’、’i’、’o’、’u’,且可能以大小写两种形式出现。
题目链接+
思路
先将字符串中的元音字母的位置找出来,然后再将各元音字母反转
双指针
我们可以使用两个指针 i 和 j 对字符串相向地进行遍历。
具体地,指针 i 初始时指向字符串 s 的首位,指针 j 初始时指向字符串 s 的末位。在遍历的过程中,我们不停地将 i 向右移动,直到 i 指向一个元音字母(或者超出字符串的边界范围);同时,我们不停地将 j 向左移动,直到 j 指向一个元音字母。此时,如果 i<j,那么我们交换 i 和 j 指向的元音字母,否则说明所有的元音字母均已遍历过,就可以退出遍历的过程。代码
class Solution:
def reverseVowels(self, s: str) -> str: """ find ans reverse :param s: :return: """ vowels = list() s = list(s) for i in range(len(s)): ch = s[i].lower() if ch == 'a' or ch == 'e' or ch == 'i' or ch == 'o' or ch == 'u': vowels.append(i) for i in range(len(vowels)//2): s[vowels[i]], s[vowels[len(vowels) - i -1]] = s[vowels[len(vowels) - i -1]], s[vowels[i]] return ''.join(s) def reverseVowels1(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)
if name == “main“:
s = Solution() string = "hello" res = s.reverseVowels(string) print(res)