题目
难度简单
给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。
如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串。
示例 1:
输入: words = ["mass","as","hero","superhero"]
输出: ["as","hero"]
示例 2:
输入: words = ["leetcode","et","code"]
输出: ["et","code"]
示例 3:
输入: words = ["blue","green","bu"]
输出: []
思路
简单题就简单做,这个就是两层循环直接暴力匹配就好
进一步优化的方向:提高匹配子串这一步骤的效率,可以使用 KMP 算法进行优化,实现里直接用了标准库函数没自己写了,库函数还是方便的
这个题出的实在是没什么意思。。。
实现
func stringMatching(words []string) []string {
var ret []string
for i:=0 ; i<len(words) ; i++ {
for j:=0 ; j<len(words) ; j++ {
if i!=j && strings.Contains(words[j], words[i]) {
ret = append(ret, words[i])
break
}
}
}
return ret
}