1961-检查字符串是否为数组前缀
给你一个字符串 s 和一个字符串数组 words ,请你判断 s 是否为 words 的 前缀字符串 。
字符串 s 要成为 words 的 前缀字符串 ,需要满足:s 可以由 words 中的前 k(k 为 正数
)个字符串按顺序相连得到,且 k 不超过 words.length 。
如果 s 是 words 的 前缀字符串 ,返回 true ;否则,返回 false 。
示例 1:
**输入:** s = "iloveleetcode", words = ["i","love","leetcode","apples"]
**输出:** true
**解释:**
s 可以由 "i"、"love" 和 "leetcode" 相连得到。
示例 2:
**输入:** s = "iloveleetcode", words = ["apples","i","love","leetcode"]
**输出:** false
**解释:**
数组的前缀相连无法得到 s 。
提示:
1 <= words.length <= 1001 <= words[i].length <= 201 <= s.length <= 1000words[i]和s仅由小写英文字母组成
方法一:逐字符比较
思路与算法
我们可以按顺序遍历 words 中的字符串,并与 s 逐字符比较。如果遇到不同的字符,则返回 false。
同时,根据题意,当且仅当 s 与 words 中任一字符串同时遍历结束时,s 才为 words 的前缀字符串。因此,如果遇到以下两种情况时,也应返回 false:
在未遍历完成 words 的某个字符串时,s 提前遍历完成;
在遍历完成 words 的所有字符串后,s 仍未遍历完成。
代码
1 | class Solution { |
1 | class Solution: |
复杂度分析
时间复杂度:O(\min(n, m)),其中 n 为 s 的长度,m 为 words 中所有字符串的长度总和。即为逐字符比较的时间复杂度。
空间复杂度:O(1)。
Comments