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