检查字符串是否为数组前缀
给你一个字符串 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 。
解题思路
方法一:
我们可以按顺序遍历 words
中的字符串,并与 s
逐字符比较。如果遇到不同的字符,则返回 false。
同时,根据题意,当且仅当 s
与 words
中任一字符串同时遍历结束时,s 才为 words 的前缀字符串。因此,如果遇到以下两种情况时,也应返回 false:
- 在未遍历完成 words 的某个字符串时,s 提前遍历完成;
- 在遍历完成words 的所有字符串后,s 仍未遍历完成。
方法二:
还有另一种比较好的方法就是:初始化一个标志result
存放比较结果,再初始化一个空字符串用于存储数组拼接的新字符,遍历words进行拼接,每拼接一次都与s进行比较,如果相同则把result = true
并且暂停遍历返回true,遍历到最后如果都不相同就返回false
具体步骤如下:
- 第一步:初始化一个空字符串
newS
,一个result = false
- 第二步:遍历字符串
- 进行
newS+=words[i]
拼接操作,再与s
进行比较,如果为true,就令result = true
并且终止遍历
- 返回 比较结果
var isPrefixString = function(s, words) { let newS = '' let result = false for(let i=0;i<words.length;i++){ newS+=words[i] if(newS === s){ result = true return true } } return result };