【LeetCode】1408. 数组中的字符串匹配
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 1 <= words.length <= 100
- 1 <= words[i].length <= 30
- words[i] 仅包含小写英文字母。
- 题目数据 保证 每个 words[i] 都是独一无二的。
二、思路分析:
我们拿到本题,读取题目内容是一道关于字符串匹配,要求在数组中查询到是字符是另外一个字符的子串,结果并以字符串的形式返回。那么给出数组里面的元素是怎么样的呢,继续挖掘题目细节:
- 题目给出的数组words的元素数据类型都是字符串
- words的元素是仅包含小写字母的,并且每一个元素都是唯一的
- words的长度范围在1~100之间,数据量不算大
我们通过题目示列说明且数组words的长度不大,解答该题我们可以直接使用暴力模拟方法即可。
-
方法一: 暴力模拟
- words数组中元素我们都要取出来与words数组中其他元素进行对比是否是其子串
- 因此第一层for循环遍历,取出要比较大word
- 再使用第一层for循环遍历,将取出word与word1的进行判断
- 当word在word1中,且word的索引位置i与word1的索引位置j不一样时,则添加到ans
- 直到第一层for循环遍历完成,并返回结果ans
class Solution(object): def stringMatching(self, words): """ :type words: List[str] :rtype: List[str] """ ans = [] for i,word in enumerate(words): for j,word1 in enumerate(words): if i!=j and word in word1: ans.append(word) break return ans
-
方法二:字符串拼接判断
- 因为取出words[i]要在words列表中的每一个元素查找,可以将words数组转换成字符串形式存储在tmp里面,列表转换成字符串使用" ".join(words)
- 则只需要一个for循环将words数组中的元素取出来,字符串tmp中查找出现的次数
- 当tmp.count(word)次数大于1次,则word肯定是另外一个字符串的子串,则添加ans
class Solution(object): def stringMatching(self, words): """ :type words: List[str] :rtype: List[str] """ ans = [] tmp = " ".join(words) for i,word in enumerate(words): if tmp.count(word) > 1: ans.append(word) return ans
三、总结:
本题考察我们对遍历数组字符串元素进行判断,为了少使用双for循环,我们可以将数组转换成字符串方式,只需要一个for循环,这样可以提高代码的计算速度,AC提交记录如下:
- 时间复杂度:O(n),n为数组长度
- 空间复杂度:O(n),需要使用到临时遍历数组字符串长度n
以上是本期内容,欢迎大佬们点赞评论,下期见~~
转载自:https://juejin.cn/post/7128685276808871967