算法打卡第六天

52 阅读1分钟

今天是道简单的题,我终于做出来了!可惜是用暴力算法,想着官方可能有好方法,打开一看也是暴力。每日摆烂(1/1)

今日打卡题目: 1408. 数组中的字符串匹配

题目描述

给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。
如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串。

思路:

  1. 判断字串的方法可以用Array.includes()去判断;
  2. 考虑到子串和字符串的顺序是无序的,因此子串判断要从 index = 0 开始遍历;
  3. 提交一次后有报错,原因是子串重复了,因此改用 Set 存储,最后转为数组输出。
/**
 * @param {string[]} words
 * @return {string[]}
 */
var stringMatching = function(words) {
    let res = new Set()
    for(let i = 0; i<words.length; i++) {
        for(let j = 0; j< words.length; j++) {
            if(words[i].length > words[j].length && i!==j) {
                if(words[i].includes(words[j])) res.add(words[j])
            }
        }
    }
    return [...res]
};