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

题目描述

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

示例

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

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

先把数组中所有的+的数量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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值