这题题目理解有点坑,尤其是‘注意:字典中可能有重复单词。’的理解,其实是允许重复的,但是自身不能重复 我是用全排序的思路来搞得 代码如下:

import itertools as it
while True:
    try:
        lst=list(map(str, input().split()))
        n=lst[0]
        k=lst[-1]
        mb=lst[-2]#目标序列
        lst.remove(n)#把对应内容去除
        lst.remove(k)
        lst.remove(mb)
        #print(n,k,mb,lst)#测试用
        lstqpx=list(it.permutations(mb))#全排序,得到的结果是('a', 'b', 'c'), ('a', 'c', 'b')这种形式
        #print(lstqpx)#测试用
        sltqpxtmp=[]#存储临时变量
        for i in lstqpx:
            sltqpxtmp.append(''.join(i))
        #全排序有可能会排进重复的,因此要循环去除,不是光去除一个就可以的
        for i in sltqpxtmp:#将目标自己去除,得到的是'acb', 'bac', 'bca', 'cab', 'cba',去重复的
            if i==mb:
                sltqpxtmp.remove(i)
        #print(sltqpxtmp)#测试用
        tmp=[]
        for i in lst:
            if i in sltqpxtmp:
                tmp.append(i)
        #tmp=list(set(tmp))#不用去重
        #print(tmp)
        tmp=sorted(tmp)#排序
        #print(tmp)#测试排序后的数组
        print(len(tmp))#打印个数
        print(tmp[int(k)-1])
    except:
        break

引用别的大佬的代码更好 其他大佬的这个思路非常妙

#针对长度相等,且本身不相同的字串,对比单词中每一个符号的数量是否一样,如果一样,则可以通过交换顺利变成相同。
def is_brother(str1, str2): 
    for i in str1:
        if str1.count(i) != str2.count(i):
            return False
    return True

while True:
    try:
        s = input().split(' ') #接受输入,提取相关参数
        n = int(s[0])
        words = []
        brother = s[-2]
        len_b = len(brother)
        k = int(s[-1])
        
        for i in range(n):#遍历所有单词
            if len(s[i+1]) == len_b:#判断长度是否相等
                if s[i+1] != brother:#判断本身是否完全相同
                    if is_brother(s[i+1],brother):#如果满足上述条件,再判断其是否具备兄弟特征
                        words.append(s[i+1])#是则提取出来
#        print(words)
        words = sorted(words)#按字典排序
    #输出
        print(len(words))
        if k < len(words):
            print(words[k-1])
    except:
        break