题解 | #查找兄弟单词#
查找兄弟单词
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)