本题看似实现了很高级的功能,实际只是正则表达式的简单应用。
用正则表达式(此处因涉及变量,故写成Python 3中f-string的形式) f"(?<=\s{给定的单词c}\s)[\w\']+(?=\s)" 即可匹配出现在给定的单词c后的单词。
其中第一部分"(?<=\s{给定的单词c}\s)"表示所有查找的内容前是空格+给定单词c+空格的形式,第二部分"[\w\']"表示所要查找的内容由字母和单引号组成,第三部分"(?=\s)"表示所要查找的内容后是空格。
为了能查找到匹配到句首和句尾,匹配时在台词前后各加一个空格。
最后将查找的词按词频和位置排序后输出满足要求的最值项即可。
最终代码有五行。
代码长度:186字节 vs. 全站第一:116字节。
import sys,re
for a in sys.argv[1:]:
for c in(s:=a.split("\n"))[1:]:
t=re.findall("(?<=\s"+c+"\s)[\w\']+(?=\s)"," "+s[0]+" ")
print(min((-t.count(j),i,j)for i,j in enumerate(t))[2])
|