LintCode 49 [Sort Letters by Case]

原題

給定一個只包含字母的字符串,按照先小寫字母后大寫字母的順序進行排序。

給出"abAcD",一個可能的答案為"acbAD"

小寫字母或者大寫字母他們之間不一定要保持在原始字符串中的相對位置。
在原地掃描一遍完成

解題思路

  • Two Pointers - 對撞型指針問題
  • 做指針和右指針指向的字母,可能出現(xiàn)四種情況需要考慮:
  • 左:小寫 | 右:小寫 ====> 左指針左移
  • 左:大寫 | 右:小寫 ====> 交換字母
  • 左:大寫 | 右:大寫 ====> 右指針右移
  • 左:小寫 | 右:小寫 ====> 左指針左移,右指針右移

完整代碼

class Solution:
    """
    @param chars: The letters array you should sort.
    """
    def sortLetters(self, chars):
        if not chars or len(chars) < 2:
            return chars
            
        left, right = 0, len(chars) - 1
        while left < right:
            if ord(chars[left]) < 96 and ord(chars[right]) > 96:
                chars[left], chars[right] = chars[right], chars[left]
            elif ord(chars[left]) < 96 and ord(chars[right]) < 96:
                right -= 1
            elif ord(chars[left]) > 96 and ord(chars[right]) > 96:
                left += 1
            else:
                left += 1 
                right -= 1
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容