Leetcode-917

tianwen42發表於2024-06-10

題目917.僅僅反轉字母

難度:簡單

給你一個字串 s ,根據下述規則反轉字串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小寫或大寫)位置反轉。

返回反轉後的 s

示例 1:

輸入:s = "ab-cd"
輸出:"dc-ba"

示例 2:

輸入:s = "a-bC-dEf-ghIj"
輸出:"j-Ih-gfE-dCba"

示例 3:

輸入:s = "Test1ng-Leet=code-Q!"
輸出:"Qedo1ct-eeLg=ntse-T!"

提示

  • 1 <= s.length <= 100
  • s 僅由 ASCII 值在範圍 [33, 122] 的字元組成
  • s 不含 '"' 或 '\'

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/reverse-only-letters/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路

雙指標法遍歷

class Solution:
    def reverseOnlyLetters(self, s: str) -> str:
        s=list(s)
        head,tail=0,len(s)-1
        while(head<tail):
            if s[head].isalpha() and s[tail].isalpha():
                s[head],s[tail]=s[tail],s[head]    #交換
                head+=1
                tail-=1
            elif (s[head].isalpha()) and (s[tail].isalpha()==False):
                tail-=1
            elif (s[head].isalpha()==False) and (s[tail].isalpha()):
                head+=1
            elif (s[head].isalpha()==False) and (s[tail].isalpha()==False):
                head+=1
                tail-=1
        
        return ''.join(s)