蓝桥杯python备赛-16届省赛B

张开发
2026/4/8 1:06:42 15 分钟阅读

分享文章

蓝桥杯python备赛-16届省赛B
问题描述小蓝手里有一个单词本记录在 words.txt 中其中每一行包含一个仅有小写英文字母组成的单词。小蓝想要找到一个最长的优美字符串。一个长度为 nn 的字符串 sc1c2…cnsc1​c2​…cn​ 是优美字符串必须满足 ss 在单词本中且满足以下两个条件之一n1n1;n1n1且存在一个优美字符串 s′s′, s′s′ 的长度为 n−1n−1s′s′ 的字符调整顺序后与 c1c2…cn−1c1​c2​…cn−1​ 一致。例如假设 words.txtwords.txt 文件中的单词如下bb、bcbc、cbdcbd、dbcadbca那么s1bs1​b长度 11是优美字符串s2bcs2​bcs′bs′b 在单词本中出现过且是优美字符串所以 s2s2​ 是优美字符串s3cbds3​cbds′bcs′bc 在单词本中出现过且是优美字符串所以 s3s3​ 是优美字符串s4dbcas4​dbcas′cbds′cbd 在单词本中出现过且是优美字符串所以 s4s4​ 是优美字符串。请帮助小蓝从单词本 words.txtwords.txt 中找出长度最大的优美字符串如果存在多个答案优先使用字典序最小的那一个作为答案。输入格式使用标准输入读取 words.txt 里的字符串。输出格式输出一行包含一个字符串表示长度最大的优美字符串若有多个输出字典序最小的那个。样例输入无样例输出无评测用例规模与约定无具体规模与约定单词本 words.txtwords.txt 中的每个单词仅包含小写英文字母。答案提交这是一道结果填空题只需提交一个字符串。填写多余内容将无法得分。学习读文件with open(words.txt, r, encodingutf-8) as f:#读文件words list(set(f.read().split()))#去除重复值集合可以去除重复值排序words.sort(keylambda x: (len(x), x))完整代码with open(words.txt, r, encodingutf-8) as f:#读文件 words list(set(f.read().split()))#去除重复值 sorted_words set() #不存优美单词本身而是优美单词排序后再存入 final_words []#就存优美单词本身 words.sort(keylambda x: (len(x), x))#把words排序短的在前长的在后若长度相同看字母顺序排序 for w in words: if len(w) 1: sorted_words.add(w)#直接加入排序的优美单词 final_words.append(w)#也直接加入优美单词 else: pre_words .join(sorted(w[:-1]))#去掉最后一个字母排序前几个字母 if pre_words in sorted_words:#如果在排序的优美单词里 sorted_words.add(.join(sorted(w)))#将单词排序加入排序优美单词 final_words.append(w)#同时直接加入优美单词本身 # 找最长、字典序最小 if final_words: max_len len(final_words[-1])#因为前面已经排过序了直接找最长的计算其长度为max_len for c in reversed(final_words):#因为题目是按照最长最小要求的所以将全部再倒着排一遍 if len(c) max_len:#如果长度相等则让其ans一直重复替代直到len不等于max_len则输出 ans c else: break print(ans)难度中等

更多文章