LeetCodeブラシ問題の917.アルファベットのみを反転


LeetCodeブラシ問題の917.アルファベットのみを反転
私はどこへ行くか分かりませんが、私はもう道にいます.
时間は慌ただしくて、会ったことがありませんが、ここで出会って、本当に大きな縁で、あなたの訪問に感謝します!
  • タイトル:1つの文字列Sが与えられ、「反転後」の文字列が返され、アルファベットではない文字が元の場所に残り、すべてのアルファベットの位置が反転します.
  • 例:
  •    1 :
      :"ab-cd"
      :"dc-ba"
    
       2:
      :"a-bC-dEf-ghIj"
      :"j-Ih-gfE-dCba"
    
       3:
      :"Test1ng-Leet=code-Q!"
      :"Qedo1ct-eeLg=ntse-T!"
    
  • ヒント:
  • S.length <= 100
  • 33 <= S[i].ASCIIcode <= 122
  • Sにor"
  • は含まれていません
  • コード:
  • class Solution:
        def reverseOnlyLetters(self, S: str) -> str:
            a = []
            b = ['-1'] * len(S)
            for i in range(len(S)):
                if (S[i] >= 'a' and S[i] <= 'z') or (S[i] >= 'A' and S[i] <= 'Z'):
                    a.append(S[i])
                else:
                    b[i] = S[i]
            a.reverse()
            for i in range(len(S)):
                if b[i] != '-1':
                    a.insert(i,b[i])
            return ("".join(a))
    #      :64 ms,     Python3       28.12%   
    #      :12.9 MB,     Python3       96.75%   
    
  • アルゴリズムの説明:アルファベットの文字をa=[]リストに保存し、aを反転します.アルファベットではない文字をb=[‘-1’]*len(S)に保存し、-1bのリストを埋めます.アルファベットではない文字の位置を記録するためです.その後、bの非-1文字を位置別にaに挿入し、aを出力すればよい.