携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情
题目详情
LeetCode题库序号 1408. 数组中的字符串匹配 ,难度为 简单。
Tag : 「暴力枚举」
给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。
如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 words[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串。
示例 1:
输入:words = ["mass","as","hero","superhero"]
输出:["as","hero"]
解释:"as" 是 "mass" 的子字符串,"hero" 是 "superhero" 的子字符串。
["hero","as"] 也是有效的答案。
示例 2:
输入:words = ["leetcode","et","code"]
输出:["et","code"]
解释:"et" 和 "code" 都是 "leetcode" 的子字符串。
示例 3:
输入: words = ["blue","green","bu"]
输出: []
提示:
- 1 <= words.length <= 100
- 1 <= words[i].length <= 30
- words[i] 仅包含小写英文字母。
- 题目数据 保证 每个 words[i] 都是独一无二的。
暴力枚举
题解思路:首先了解到题目中子字符串的含义,子字符串一定会比父字符串短的,我们采用双重遍历,外层选中遍历的判断对象,内层作为遍历对比对象,在内层遍历中,发现word[i]存在时,将它加入到返回集合中,结束内层循环,这一点非常重要,否则会导致返回值重复。详情见以下代码:
题解代码
/**
* Solution操作类
*
* @author JackPan
* @date 2022/08/23 12:40
**/
public class Solution {
public List<String> stringMatching(String[] words) {
List<String> res = new ArrayList<>();
int len = words.length;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
if (i != j && words[j].contains(words[i])) {
res.add(words[i]);
break;
}
}
}
return res;
}
}
结尾
我的"刷完LeetCode题库"系列文章的第 No.1408 序号的题目,本次刷题之旅系列开始于 2022-06-12,因为LeetCode上部分是有锁题,我自己的目标是将先把所有不带锁的题目刷完。自己能够通过这次刷题之旅勉励自己,并且提升逻辑思维能力。这个系列的文章就是会见证我自己的一个成长过程!
思路虽然不是最优的,但是我会尽我所能!
为了让我自己的刷题之旅不中断,我特地建立了相关的仓库,来记录我自己的刷题之旅。 github.com/jackpan123/… 。