算法岗笔试题 ---找出符合条件的字符串组合
程序员文章站
2024-01-23 11:54:28
1、题目描述某公司经理希望在圣诞节期间通过出售组合装来提高公司商品的销售量。组合装里有不同种类的商品,以不同顺序排列。每个商品都有唯一的characterID。而每个组合装也有唯一的comboID,由组合装中各种商品的排列顺序表示。组合装的comboID是通过将组合装中商品的characterID按其在组合装中的排列顺序形成的。例如,如果购买了ID为a、a、b和c的商品,且组合装中的排列顺序与此相同,则comboID是aabc。由于商品是以组合装形式销售,因此经理想要找出所有畅销的组合装。如果有一位以上...
1、题目描述
某公司经理希望在圣诞节期间通过出售组合装来提高公司商品的销售量。组合装里有不同种类的商品,以不同顺序排列。每个商品都有唯一的characterID。而每个组合装也有唯一的comboID,由组合装中各种商品的排列顺序表示。组合装的comboID是通过将组合装中商品的characterID按其在组合装中的排列顺序形成的。例如,如果购买了ID为a、a、b和c的商品,且组合装中的排列顺序与此相同,则comboID是aabc。
由于商品是以组合装形式销售,因此经理想要找出所有畅销的组合装。如果有一位以上的顾客购买一款组合装,就认为该组合装畅销。他想要获得具有与此相同的商品构成的组合装的comboID的字符串列表。
输入:
- 函数/方法的输入包含两个参数
- numcombo,表示组合装套数的整数。
- comboIDs,表示组合装comboID的字符串列表。
输出:
- 返回一个列表,列表中的每个元素是表示具有相同产品构成的组合装的comboID的字符串列表。
注意:组合装的comboID为小写;输出应按照comboID在输入列表中出现的顺序排列。
示例:
说明:comboID为“abcd”,“cdab”,“bacd”的组合装含有相同商品;并且comboID为“zesa”和“saze”的组合装含有相同商品。
2、题目解答
解答思路
- 首先,将comboIDs列表中的字符串进行排序,存储到sorted_list列表中;
- 然后对sorted_list列表中的字符串进行频率统计存入s_dict字典中;将字典中频率大于1的字符串对应的comboIDs列表中的字符串输出即可。
代码实现(Python3)
'''
#列表输入
input_list=[]
for i in range(int(input())):
input_list.append(str(input()))
print('输入列表:',input_list)
'''
#将输入的列表排序
input_list=['abcd','zesa','saze','abc','pqrst','cdab','bacd']
sorted_list=[]
for s in input_list:
s_sort=sorted(s)
sorted_list.append(''.join(s_sort))
print('排序后的列表:',sorted_list)
#频率统计
s_dict={}
for i in sorted_list:
if i in s_dict:
s_dict[i]+=1
else:
s_dict[i]=1
print('字符串频率统计字典:',s_dict)
#将符合条件的输出
output_list=[]
for key,values in s_dict.items():
if values>1:
temp=[]
for j in range(len(sorted_list)):
if sorted_list[j]==key:
temp.append(input_list[j])
output_list.append(temp)
print('输出列表:',output_list)
本文地址:https://blog.csdn.net/qq_42363032/article/details/107450531