题目来源:牛客,腾讯2021校园招聘技术类编程题汇总 第2题
题目描述:
题解:
法一:个人解法
✨利用python中的set+list.sort(),感jio有点无耻。
💡唯一一点想法是:第k小的子串的长度必然小于等于k,因此,只需要将字符串s中长度小于等于k的所有子串拿出来并排序即可。
⚠️注意,由于子串可能会重复,因此借助了set去重。
🔥再注意,之前的一个错误想法是:当subs中存储的子串数量大于k时就可以停止收集子串,但这种想法是错的,因为前k小的子串可能出现在很后面。
def main():
s = input()
k = int(input())
lens = len(s)
subs = set()
for i in range(lens):
for j in range(1,k+1):
subs.add(s[i:min(i+j,lens)])
subs = list(subs)
subs.sort()
print(subs[k-1])
return
if __name__=='__main__':
main()
法二:别人的解法–k路归并
自己最开始就是这样想的,但写着写着发现,直接sort就ok,何必归并,就放弃了。
小知识总结
🌛 集合set的初始化及元素添加:s=set();s.add(a);
🌞 字符串的排序:s.sort()
,注意,这个排序是对s本身进行操作,无返回值;