eetCode 1813. 句子相似性 III

题目

%title插图%num
思路
这道题思路不难想,但是代码实现细节较多。我在做这道题时首先想的是区分长短句,如果短句中包含长句中没有的单词,则结果一定是false(因为短句只能通过增加句子补充到长句,但是不能删除句子)。之后因为题目要求只能在短句中插入一个句子使其变成长句,换句话说长句中出现的短句中没有的单词必须全部是相邻的,否则至少要插入两个以上的句子才可以。因此这里可以遍历长句,同时设定辅助变量并初始化为0,辅助变量用来遍历短句。如果当前遍历时出现了短句中没有的单词,则说明出现了断点,统计断点个数。当断点数量大于等于2时说明结果为false。特别地,如果短句被成功遍历完但长句还没遍历完,则这时只需判断之前是否出现过断点,如果未出现过则直接返回true,否则之后的断点数一定大于等于2,返回false。

代码
class Solution:
def areSentencesSimilar(self, sentence1: str, sentence2: str) -> bool:
if sentence1==sentence2:
return True
list1=sentence1.split()
list2=sentence2.split()
if len(list1)==len(list2):
return False
if len(list2)>len(list1):
list1,list2=copy.deepcopy(list2),copy.deepcopy(list1)
#print(list1,list2)
if len(list1)>len(list2):
s=0
flag=1
count=1
vis={}
for i in range(len(list1)):
vis[list1[i]]=i
for temp in list2: #判断短句中是否出现了长句中没有的单词
if vis.get(temp)==None:
return False
for i in range(len(list1)):
if count<0:
return False
if s==len(list2): #处理短句已遍历完但长句还没有遍历完的情况
if count==0:
return False
else:
return True
if list1[i]==list2[s]:
if not flag:
flag=1
s+=1
else:
if flag:
flag=0
count-=1

return True