华为机试HJ102字符统计
题目:
想法:
需要统计字符串中每个字符出现的次数,并将其按照次数从大到小排序,如果数量相同的字符要按照ASCII码从小到大排序。先遍历整个字符串统计每个字符的数量,再使用冒泡排序对字符数量和ASCII码进行排序并输出。
input_str = input()
str_dict = {}
for s in input_str:
if s not in str_dict:
str_dict[s] = 1
else:
str_dict[s] += 1
k_list = []
v_list = []
for k, v in str_dict.items():
k_list.append(k)
v_list.append(v)
for i in range(len(k_list)):
for j in range(i+1, len(k_list)):
if v_list[i] < v_list[j]:
v_list[i], v_list[j] = v_list[j], v_list[i]
k_list[i], k_list[j] = k_list[j], k_list[i]
elif v_list[i] == v_list[j] and ord(k_list[i]) > ord(k_list[j]):
v_list[i], v_list[j] = v_list[j], v_list[i]
k_list[i], k_list[j] = k_list[j], k_list[i]
print("".join(k_list))
因为遍历字符串的时间复杂度
O
(
n
)
O(n)
O(n),冒泡排序的时间复杂度是
O
(
n
2
)
O(n^2)
O(n2),因此总时间复杂度是
O
(
n
2
)
O(n^2)
O(n2)。
因为构建了统计字符串数量的字典和字典键值的列表,因此空间复杂度为
O
(
n
)
O(n)
O(n)。