华为OD2023机试真题,全题库点这里
题目名称 | 字符串重新排序 | |
---|
知识点 | 排序数组 | |
时间限制 | 1s | |
空间限制 | 256M | |
**题目描述:**
给定一个字符串s,s包含以空格分隔的若干单词,请对s进行如下处理后输出
1. 单词内部调整:对每个单词字母重新按照字典顺序排列;
2. 单词间顺序调整:
1)统计每个单词出现的次数
2)次数相同时,按单词长度升序排列
3)次数和单词长度均相同时,按字典序升序排列
请输出处理后的字符串,每个单词以一个空格分隔
**输入描述:**
一行字符串,每个字符取值范围:【a-zA-z0-9】以及空格,字符串长度范围:【1,1000】
**输出描述:**
重新排序后的字符串,每个单词间隔1个空格,且首尾无空格
示例:
输入:
This is an apple
输出:
an is This aelpp
解题思路
直接两步排序
import functools
input_str = input()
input_list = input_str.split(" ")
new_list = []
for single_str in input_list:
new_list.append("".join(sorted(single_str, reverse=False)))
def comp(a, b):
if (a[1] > b[1]):
return -1
elif (a[1] == b[1]):
if (len(a[0]) > len(b[0])):
return 1
elif (len(a[0]) == len(b[0])):
if (a[0] > b[0]):
return 1
else:
return -1
else:
return -1
else:
return 1
str_count = {}
for single_str in new_list:
if single_str in str_count:
str_count[single_str] += 1
else:
str_count[single_str] = 1
print(str_count)
list1 = sorted(str_count.items(), key=functools.cmp_to_key(comp))
res_str = ""
for item in list1:
for i in range(item[1]):
res_str += item[0] + " "
print(res_str)
菜鸟的解法
input_str = input("请输入字符串:")
input_list = input_str.split(" ")
new_list = []
for single_str in input_list:
new_list.append("".join(sorted(single_str, reverse=False)))
str_count = {}
for single_str in new_list:
if single_str in str_count:
str_count[single_str] += 1
else:
str_count[single_str] = 1
dict = sorted(str_count.items())
def sortdict(dict):
for i in range(len(dict)):
for j in range(i + 1, len(dict)):
if int(dict[i][1]) < int(dict[j][1]):
dict[i], dict[j] = dict[j], dict[i]
if int(dict[i][1]) == int(dict[j][1]):
if len(dict[i][0]) > len(dict[j][0]):
dict[i], dict[j] = dict[j], dict[i]
elif len(dict[i][0]) == len(dict[j][0]):
if dict[i][0] > dict[j][0]:
dict[i], dict[j] = dict[j], dict[i]
return dict
dict = sortdict(dict)
print(dict)
for i in dict:
for j in range(i[1]):
print(i[0],end=" ")