题目描述
输入一个仅包含+和-的数组,输出一个所有+在左边-在右边排序之后的数组,注意要在数组内进行排序
示例
输入:[‘+‘,’-‘,’-‘,’-‘,’+‘,‘+’]
输出:[‘+‘,‘+‘,‘+‘,’-‘,’-‘,’-‘]
思路一——遍历+交换位置
先把数组中所有的+的数量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