917. 僅僅反轉(zhuǎn)字母(Python)

題目

難度:★☆☆☆☆
類型:字符串

給定一個(gè)字符串 S,返回 “反轉(zhuǎn)后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置發(fā)生反轉(zhuǎn)。

提示
S.length <= 100
33 <= S[i].ASCIIcode <= 122
S 中不包含 \ or "

示例

示例 1
輸入:"ab-cd"
輸出:"dc-ba"

示例 2
輸入:"a-bC-dEf-ghIj"
輸出:"j-Ih-gfE-dCba"

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

解答

方案1:哈希表

我們使用字典記錄每個(gè)字符所在的位置,然后找出所有字母字符的位置并組成列表,將該列表逆序更新原字典,相當(dāng)于只在有字母的位置上做字符串逆序,使用更新后的字典構(gòu)建字母逆序的字符串。

class Solution:
    def reverseOnlyLetters(self, S):
        """
        :param S: str
        :return: str
        """
        loc = {i: c for i, c in enumerate(S)}
        alpha = {i: c for i, c in loc.items() if c.isalpha()}
        reversed_alpha = {i: c for i, c in zip(reversed(list(alpha.keys())), alpha.values())}
        loc.update(reversed_alpha)
        return ''.join([loc[i] for i in range(len(S))])

方案2:雙指針

我們定義左右指針,并初始化為字符串兩端字符所在位置,然后兩個(gè)指針逐漸向中間靠攏,當(dāng)兩個(gè)指針同時(shí)找到字母時(shí),交換兩指針處的字符,如果只有一個(gè)指針處是字母,那么另一個(gè)指針要繼續(xù)移動(dòng),直到找到字母。循環(huán)控制條件是左指針不能到右指針右邊。

class Solution:
    def reverseOnlyLetters(self, S):
        """
        :param S: str
        :return: str
        """

        S = list(S)
        left, right = 0, len(S)-1
        while left < right:
            if not S[left].isalpha():
                left += 1
            elif not S[right].isalpha():
                right -= 1
            else:
                S[left], S[right] = S[right], S[left]
                left += 1
                right -= 1
        return ''.join(S)

如有疑問或建議,歡迎評(píng)論區(qū)留言~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,339評(píng)論 0 10
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,060評(píng)論 0 2
  • ??引用類型的值(對(duì)象)是引用類型的一個(gè)實(shí)例。 ??在 ECMAscript 中,引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)...
    霜天曉閱讀 1,219評(píng)論 0 1
  • 低音提琴是西洋弦樂器中的一種,也是現(xiàn)代交響樂隊(duì)中弦樂組中發(fā)音最低的樂器。低音提琴與弦樂組中其他樂器(小提琴、中提琴...
    Gagu_閱讀 1,470評(píng)論 0 0
  • 窗外東風(fēng)劃春枝,沙沙地。 月光靜靜的,籠罩大地。 仿佛是你,卻又不敢判斷,相隔千里,詞句里的愁,關(guān)于你。 太晚了,...
    未想到合適的名字閱讀 450評(píng)論 1 4

友情鏈接更多精彩內(nèi)容