解题思路

  1. 基本思路:

    • 遍历每个字符串
    • 检查是否包含任一关键词
    • 记录包含关键词的字符串索引
    • 对结果排序
  2. 优化方案:

    • 使用 存储关键词提高查找效率
    • 使用 动态存储结果
    • 最后转换为数组并排序

代码

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(const string& key : keys) {
                if(A[i].find(key) != string::npos) {
                    result.push_back(i);
                    break;  // 找到一个关键词就可以跳出内层循环
                }
            }
        }
        
        // 处理空结果的情况
        if(result.empty()) {
            return vector<int>{-1};
        }
        
        // 排序结果
        sort(result.begin(), result.end());
        return result;
    }
};
import java.util.*;

import java.util.*;

public class KeywordDetect {
    public int[] containKeyword(String[] A, int n, String[] keys, int m) {
        ArrayList<Integer> resultList = new ArrayList<>();
        
        // 将关键词存入HashSet提高查找效率
        HashSet<String> keySet = new HashSet<>(Arrays.asList(keys));
        
        // 遍历每个字符串
        for(int i = 0; i < n; i++) {
            // 检查是否包含任一关键词
            for(String key : keySet) {
                if(A[i].contains(key)) {
                    resultList.add(i);
                    break;  // 找到一个关键词就可以跳出内层循环
                }
            }
        }
        
        // 处理空结果的情况
        if(resultList.isEmpty()) {
            return new int[]{-1};
        }
        
        // 转换为数组并排序
        int[] result = new int[resultList.size()];
        for(int i = 0; i < resultList.size(); i++) {
            result[i] = resultList.get(i);
        }
        Arrays.sort(result);
        return result;
    }
}
class KeywordDetect:
    def containKeyword(self, A, n, keys, m):
        result = []
        
        # Convert keys to set for faster lookup
        key_set = set(keys)
        
        # Check each string
        for i in range(n):
            # Check if string contains any keyword
            for key in key_set:
                if key in A[i]:
                    result.append(i)
                    break
        
        # Handle empty result
        if not result:
            return [-1]
        
        # Sort and return result
        return sorted(result)

算法及复杂度

  • 算法:字符串匹配 + 排序
  • 时间复杂度:,其中 为字符串数量, 为关键词数量, 为平均字符串长度
  • 空间复杂度:,用于存储结果数组