列表

详情


QR7. 文本嗅探

描述

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

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


示例1

输入:

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

输出:

[0,2]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 3ms, 内存消耗: 428KB, 提交时间: 2021-09-07

class KeywordDetect {
public:
    vector<int> containKeyword(vector<string> A, int n, vector<string> keys, int m) {
        // write code here
        
        vector<int> ans;
        for(int i=0; i<A.size(); i++)
        {
            string s = A[i];
            bool flag = false;
            for(int j=0; j<keys.size(); j++)
            {
                if(s.find(keys[j])!= string::npos)
                {
                    flag = true;
                    break;
                }
            }
            if(flag)
                ans.push_back(i);
        }
        if(ans.empty())
            ans.push_back(-1);
        return ans;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 624KB, 提交时间: 2022-03-30

class KeywordDetect {
public:
    vector<int> containKeyword(vector<string> A, int n, vector<string> keys, int m) {
        // write code here
        set<int> temp;
        vector<int> ans;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if(A[j].find(keys[i]) != -1) temp.insert(j);
            }
        }
        if (temp.empty()) temp.insert(-1);
        for (auto it = temp.begin(); it != temp.end(); it++) {
            ans.push_back(*it);
        }
        return ans;
    }
};

C++ 解法, 执行用时: 4ms, 内存消耗: 428KB, 提交时间: 2021-10-10

class KeywordDetect {
public:
    vector<int> containKeyword(vector<string> A, int n, vector<string> keys, int m) {
        vector<int> result;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if (A[i].find(keys[j])!=-1){
                    result.push_back(i);
                    break;
                }
            }
        }
        if(result.size()==0)
            result.push_back(-1);
        return result;
    }
};

C++ 解法, 执行用时: 4ms, 内存消耗: 428KB, 提交时间: 2021-08-25

class KeywordDetect {
public:
    vector<int> containKeyword(vector<string> A, int n, vector<string> keys, int m) {
        // write code here
        
        vector<int> ans;
        for(int i=0; i<A.size(); i++)
        {
            string s = A[i];
            bool flag = false;
            for(int j=0; j<keys.size(); j++)
            {
                if(s.find(keys[j])!= s.npos)
                {
                    flag = true;
                    break;
                }
            }
            if(flag)
                ans.push_back(i);
        }
        if(ans.empty())
            ans.push_back(-1);
        return ans;
    }
};

C++ 解法, 执行用时: 4ms, 内存消耗: 476KB, 提交时间: 2020-10-31

class KeywordDetect {
public:
    vector<int> containKeyword(vector<string> A, int n, vector<string> keys, int m) {
        // write code here
        vector<int>a;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(A[i].find(keys[j])!=-1) {a.push_back(i);break;}
            }
        }
        if(!a.empty()) return a;
        a.push_back(-1);
        return a;
    }
};

上一题