Python programmers interview book --- problem-solving algorithm Summary: Chapter 5 How to sort the array of characters string 5.6 uppercase and lowercase letters

# -*- 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()

 

Guess you like

Origin blog.csdn.net/qingyuanluofeng/article/details/94308047