给定一个句子列表和一个短语列表。任务是查找哪些句子包含一个短语中的所有单词,并为每个短语打印包含给定短语的句子编号。
约束:一个单词不能超过10个句子。
例子:
Input:
Sentences:
1. Strings are an array of characters.
2. Sentences are an array of words.
Phrases:
1. an array of
2. sentences are strings
Output:
Phrase1 is present in sentences: 1,2
Phrase2 is present in sentences: None
Since each word in phrase 1 exists in both the sentences,
but all the words in second phrase do not exist in either.
Input:
Sentences:
1. Sets in python are a hash table representation of arrays.
2. Searching in Sets are a function of time complexity O(1).
3. Sets only contain unique elements, and have no order.
Phrases:
1. Sets are a
2. Searching in
Output:
Phrase1 is present in sentences: 1, 2
Phrase2 is present in sentences: 2
方法:对于每个短语,我们必须找到包含该短语所有单词的句子。因此,对于给定短语中的每个单词,我们检查一个句子是否包含该单词。我们为每个句子执行此操作。如果句子中的单词存储在集合中而不是列表中,则此搜索过程可能会变得更快。
下面是上述方法的实现:
# Python program to find the sentence
# that contains all the given phrases
def getRes(sent, ph):
sentHash = dict()
# Loop for adding hased sentences to sentHash
for s in range(1, len(sent)+1):
sentHash[s] = set(sent[s-1].split())
# For Each Phrase
for p in range(0, len(ph)):
print("Phrase"+str(p + 1)+":")
# Get the list of Words
wordList = ph[p].split()
res = []
# Then Check in every Sentence
for s in range(1, len(sentHash)+1):
wCount = len(wordList)
# Every word in the Phrase
for w in wordList:
if w in sentHash[s]:
wCount -= 1
# If every word in phrase matches
if wCount == 0:
# add Sentence Index to result Array
res.append(s)
if(len(res) == 0):
print("NONE")
else:
print('% s' % ' '.join(map(str, res)))
# Driver Function
def main():
sent = ["Strings are an array of characters",
"Sentences are an array of words"]
ph = ["an array of", "sentences are strings"]
getRes(sent, ph)
main()
Phrase1:
1 2
Phrase2:
NONE