題目
難度:★★☆☆☆
類型:字符串
編寫(xiě)一個(gè)函數(shù),以字符串作為輸入,反轉(zhuǎn)該字符串中的元音字母。
說(shuō)明:
元音字母為["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]。
示例
示例 1:
輸入: "hello"
輸出: "holle"
示例 2:
輸入: "leetcode"
輸出: "leotcede"
解答
方案1:雙指針
這道題目以【題目344. 反轉(zhuǎn)字符串】為基礎(chǔ),我們同樣采用雙指針交換的方式進(jìn)行,與上一道題目不同的是,這里限制需要交換的字母是元音字母,因此我們需要進(jìn)行原因字母的搜索過(guò)程,我們這里使用循環(huán)實(shí)現(xiàn),循環(huán)的每一個(gè)控制條件都需要加入指針位置是否合法的判斷,防止左指針移動(dòng)到右指針右邊去。
class Solution:
def reverseVowels(self, s):
vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"] # 元音字母列表
s = list(s) # 列表化輸入字符串
left, right = 0, len(s) - 1 # 初始化左右指針位置
while left < right: # 如果指針位置合法
if s[left] not in vowels: # 如果左指針處字符不是元音字母
left += 1 # 左指針右移
elif s[right] not in vowels: # 如果右指針處字符不是元音字母
right -= 1 # 右指針左移
else: # 如果左右指針處字符都是元音字母
s[left], s[right] = s[right], s[left] # 交換位置
left += 1 # 左指針右移
right -= 1 # 右指針左移
return ''.join(s) # 將列表中的字符連接起來(lái)
方案2:列表
先把元音字母提取出來(lái)放在新的列表vowels_new中并逆序,再遍歷原單詞的列表,遇到元音字母就替換成vowels_new里的元素,最后用將列表中的字符連接成字符串。
class Solution:
def reverseVowels1(self, s):
vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
vowels_new = []
for i in range(len(s)):
if s[i] in vowels:
vowels_new.append(s[i]) # 添加到元音字母列表
vowels_new.reverse() # 核心操作:逆序
s = list(s) #
count = 0
for i in range(len(s)): # 使用逆序后的元音字母一一替換掉原來(lái)元音字母的位置
if s[i] in vowels:
s[i] = vowels_new[count]
count += 1
return ''.join(s) # 將結(jié)果連接起來(lái)
如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~