每日一提——+-符号排序

题目描述

输入一个仅包含+和-的数组,输出一个所有+在左边-在右边排序之后的数组,注意要在数组内进行排序

示例

输入:[‘+‘,’-‘,’-‘,’-‘,’+‘,‘+’]
输出:[‘+‘,‘+‘,‘+‘,’-‘,’-‘,’-‘]

思路一——遍历+交换位置

先把数组中所有的+的数量count(+)数出来,那就意味着数组前count(+)个元素都是+,所以遍历 前count(+)个元素,把里面-的与count(+)之后的+交换一次位置,代码如下

def sorted_string(string): 
    for i in range(0,string.count('+')):
        if string[i] == '-':
            for j in range(string.count('+'), len(string)):
                if string[j] == '+':
                    tmp = string[i]
                    string[i] = string[j]
                    string[j] = tmp
                    break
                
    return string   
思路二——结合桶排序思想

但是这个方法其实就不是在数组原本基础上进行修改了,这种方法需要新空间,只能确保最后输出排好序的顺序,放在这只是扩展下思路。
利用一个有序字典,里面按题目要求的顺序±来依次初始化两个元素,其中key为+、-,value为该字符在数组中出现的次数,最后遍历该字典进行打印,每个字符打印value个

from collections import OrderedDict

def sorted_string(string):
    dic_tong = OrderedDict({
        '+': 0,
        '-': 0,
    })
    for s in string:
        dic_tong[s] += 1
    for sub_string, num in dic_tong.items():
        for i in range(num):
            print(sub_string, end=' ')
因为需要有序字典,所以引入了OrderedDict