5380.数组中的字符串匹配是暴力双循环,因为单词长度小于100肯定不会超时,但是注意每找到一个子串就break,否则可能会出现重复。类解决方案:defstringMatching(self,words:List[str])->List[str]:ans=[]foriinrange(len(words)):forjinrange(len(words)):ifi==j:continueifwords[i]inwords[j]:ans.append(words[i])breakreturnans5381.用key查询排列的问题想不出好的解决办法,就直接写了最普通的模拟。我在本地试了一下,还是挺快的。应该有更好的方法。类解决方案:defprocessQueries(self,queries:List[int],m:int)->List[int]:m=min(m,max(queries))p=[i+1foriinrange(m)]ans=[]forxinqueries:i=p.index(x)ans.append(i)x=p.pop(i)p.insert(0,x)returnans5382.HTMLentityparserThisquestionisfor蟒蛇没用。我直接用了替换功能。注意python字符串是不可变类型,每次都会生成一个新的对象。类解决方案:defentityParser(self,text:str)->str:text=text.替换('“','“')文本=文本。replace(''','\'')text=text.replace('&','&')text=text.replace('>','>')text=text.replace('<','<')text=text.replace('⁄','/')returntext感谢大家的指正,找了两个同学指正。如果这段代码遇到>,则输出结果为>,但这实际上是&转义&和gt;的组合;,所以代码可以通过把text=text.replace('&','&')放在最后一句来避免,代码如下:classSolution:defentityParser(self,text:str)->str:文本=文本。replace('"','"')text=text.replace(''','\'')text=text.replace('&','&')text=text.replace('>;','>')text=text.replace('<','<')text=text.replace('?','/')returntext但是我发现判断系统目前支持>的输出;实际上是>。然后尝试“>”同样,输出为“>”,没有进行递归处理。看来判断机有问题。5383.Nx3gridmapcoloringofschemes的数量有一个很相似的题目,就是一个n位的数组。每个位置都可以填0、1、2,但相邻的不能重复。找到总数中的填充方法。(好像还有一些其他的附加条件)这道题三种颜色没有区别,所以用ABC表示。当n=1时,A开头为:ABAABCACAACBB开头为:BABBACBCABCBC开头为:CABCACCBA这里的CBC只有两种模式:ABA表示第一个和第三个相同,ABC表示所有三者不同。ABA模式一共有6种:ABAACABABBCBCACCBCABC模式有6种:ABCACBBACBCACABCBA第二层需要在第一层的基础上进行排列,只和他的模式有关,与他无关用特定的颜色做。如果第一层是ABA模式(这个模式的任何情况都会导致相同的结果):第一层ABAABAABAABAABA|||||||||||||||第二层BABBACBCB有5种CACCAB结果。同样,我们只看图案,不看具体的颜色。有3种ABA形态和2种ABC形态。如果第一层是ABC模式(这种模式的任何情况都会导致相同的结果):第一层ABCABCABCABC||||||2种,2种ABC模式在我们的代码中,我们用aba表示当前层的ABA模式数,abc表示当前层的ABC模式数,aba2,abc2表示下一层。这样可以推导出类的个数:MOD=1000000007aba2=(aba*3+abc*2)%MODabc2=(aba*2+abc*2)%MODaba和abc最初是6类解决方案:defnumOfWays(self,n:int)->int:aba=6abc=6MOD=1000000007for_inrange(n-1):aba2=(aba*3+abc*2)%MODabc2=(aba*2+abc*2)%MODaba,abc=aba2,abc2return(aba+abc)%MOD欢迎来到我的博客:https://codeplot.top/我的博客分类:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/
