原題
給定一個只包含字母的字符串,按照先小寫字母后大寫字母的順序進行排序。
給出"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