题解 | #查找兄弟单词#

查找兄弟单词

http://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68

dic_in = input() # 3 abc bca cab abc 1 一行全部输入进来了,需要截取n、x、k

print(n)

list_in = dic_in.split()

print(list_in) # ['3', 'abc', 'bca', 'cab', 'abc', '1']

n = int(list_in[0]) # 需要进行转换

可以对n进行判断 1≤n≤1000 ,不是函数,print(0)?

if n<1 or n >1000:

return 0

x = list_in[-2] # 字符串 k = int(list_in[-1]) # 需要进行转换

可以对k进行判断1≤k<n,没有意义?

if k<1 or k >=n:

return 0

dic_slice = list_in[1:n + 1:1] # 字典切片

print(dic_slice) # ['abc', 'bca', 'cab']

注意:字典中可能有重复单词。

第一行输出查找到x的兄弟单词的个数m m是一个整数

第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。 # 要容错,新字典的第j个

按照字典顺序,只要新列表顺序存储并不影响输出值,只是需要处理下标与k的关系

初步设想

1、x和dic_slice元素长度必须相等,2、x的组成在dic_slice元素必须存在,3、x与dic_slice元素不相等 会出现问题abb 匹配aab

4、对x建立字典,x的key-value 必须与dic_slice一致。避免abb 匹配aab 5、满足条件存储值

1、对x迭代,建立字典

x_dic = {} for i in x: if i not in x_dic: x_dic[i] = 1 else: x_dic[i] += 1

print(x_dic) # {'a': 1, 'b': 1, 'c': 1}

len_x = len(x) # 获得x长度 list_out = []

2、对切片元素进行循环,首先比较长度

for j in dic_slice: if len(j) == len_x: # 如果长度相等,需要判断数量是否一致 for jj in x_dic.keys(): # print(jj) if j.count(jj) == x_dic[jj]: # 如果数值相等 continue else: break # 跳出循环 else: list_out.append(j)

此时的list_out有含x的元素,进行remove

#print(list_out) while True: if x in list_out: #print(x) list_out.remove(x) # 这需要判断,如果x不在列表中,会报错.奇怪明明移除了,为啥打印还有? # remove 只删除了第一个 #print(list_out) else: break #print(list_out) list_out= sorted(list_out)

3、判断数值是否存在

out_1 = len(list_out) # 第一个返回的是长度 print(out_1) if k > out_1: # k 是第几个,下标=k-1 print() else: out_2 = list_out[k - 1] print(out_2)

全部评论
第二步比较麻烦了,对“按照字典排序”理解不一样,加了sort通过了
点赞 回复 分享
发布于 2022-05-07 23:33

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务