# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.6 如何对由大小写字母组成的字符数组排序
题目:
一个由大小写字母组成的字符串,请对它进行重新组合,使得其中的所有小写
字母排在大写字母的前面(大写字母或小写字母之间不要求保持原来次序)。
分析:
感觉像猫狗队列问题,可以分别将小写字母放到一个队列,
将大写字母放到一个队列,最后将两个队列合并即可。
另外一种常量空间复杂度的方法就是模拟快速排序中的划分方法
从后向前,跳过大写字母,找到小写字母,
从前向后,跳过小写字母,找到大写字母
将两者交换即可
关键:
参考:
Python程序员面试算法宝典
'''
def isUpperChar(char):
if not char:
return False
if ord(char) >= ord('A') and ord(char) <= ord('Z'):
return True
else:
return False
def isLowerChar(char):
if not char:
return False
if ord(char) >= ord('a') and ord(char) <= ord('z'):
return True
else:
return False
def sortString(string):
if not string:
return string
charList = list(string)
low = 0
high = len(charList) - 1
while low < high:
while low < high and isUpperChar(charList[high]):
high -= 1
while low < high and isLowerChar(charList[low]):
low += 1
if low < high:
tmp = charList[high]
charList[high] = charList[low]
charList[low] = tmp
result = "".join(charList)
return result
def process():
string = "abcBcA"
result = sortString(string)
print result
string = "aAbBcC"
result = sortString(string)
print result
string = "abCcAB"
result = sortString(string)
print result
string = "abcABC"
result = sortString(string)
print result
string = "ABCabc"
result = sortString(string)
print result
if __name__ == "__main__":
process()