首页 > 试题广场 >

文本嗅探

[编程题]文本嗅探
  • 热度指数:7643 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

现在有一个字符串列表,和一个关键词列表,请设计一个高效算法,检测出含关键字列表中关键字(一个或多个)的字符串。

给定字符串数组A及它的大小n以及关键词数组key及它的大小m,请返回一个排好序的含关键词的字符串序号的列表。保证所有字符串长度小于等于100,关键词个数小于等于100,字符串个数小于等于200。保证所有字符串全部由小写英文字符组成。若不存在含关键字的字符串,请返回一个只含-1的数组。


示例1

输入

["nowcoder","hello","now"],3,["coder",now],2

输出

[0,2]
# -*- coding:utf-8 -*-
class KeywordDetect:
    def containKeyword(self, A, n, keys, m):
        tag=[0 for i in range(n)]#tag保存字符串是否含关键字的标签
        ans=[]
        for i in range(m):#对每一个关键字,在每一个字符串中寻找是否存在
            for j in range(n):
                if A[j].find(keys[i])!=-1:#存在则标签为1
                    tag[j]=1
        for i in range(n):#将标签为1的下标保存在ans数组中
            if tag[i]==1:
                ans.append(i)
        if ans==[]:#数组为空则不存在含关键字的字符串,返回-1
            return [-1]
        else:
            return ans

发表于 2018-08-22 12:53:07 回复(0)

python解法来装个b,只需要两行

class KeywordDetect:
    def containKeyword(self, A, n, keys, m):
        res={i for i,v in enumerate(A) for key in keys if key in v}
        return list(res) if res else [-1]
发表于 2017-11-07 17:33:28 回复(2)