题目大意:
数组中的字符串匹配
给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。
如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[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] 都是独一无二的。
如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=1408
这道题的数据规模很小,因此使用2层循环的暴力解完全可行。我们利用每一个字符串去和其他所有字符串比较,如果当前字符串是其他任意一个字符串的子串,那么当前字符串就是一个符合条件的结果,加入返回结果集即可。java语言查看是否是子串的方式可以使用contains方法。
实现代码:
public List<String> stringMatching(String[] words) { List<String> res = new ArrayList<>(); for(int i=0;i<words.length;i++){ for(int j=0;j<words.length;j++){ if(i==j) continue; if(words[j].contains(words[i])){ res.add(words[i]); break; } } } return res; }
本题解法执行时间为3ms。
Runtime: 3 ms, faster than 96.50% of Java online submissions for String Matching in an Array.
Memory Usage: 39.3 MB, less than 100.00% of Java online submissions for String Matching in an Array.
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: http://leetcode.jp/leetcode-1408-string-matching-in-an-array-解题思路分析/