检查字符串是否为数组前缀

115 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情

题目描述

给你一个字符串 s 和一个字符串数组 words ,请你判断 s 是否为 words 的 前缀字符串 。
字符串 s 要成为 words 的 前缀字符串 ,需要满足:s 可以由 words 中的前 k(k 为 正数 )个字符串按顺序相连得到,且 k 不超过 words.length 。
如果 s 是 words 的 前缀字符串 ,返回 true ;否则,返回 false 。
来源:力扣(LeetCode)

  • 示例 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 <= 100
  • 1 <= words[i].length <= 20
  • 1 <= s.length <= 1000
  • words[i] 和 s 仅由小写英文字母组成

思路分析

根据题意可知,题目给出一个字符串 s 和一个字符串数组 words,需要我们判断 s 是否为 words 的 前缀字符串。 实际上就是要我们判断字符串数组words的前k个字符串拼接在一起,看是否等于s,若是等于就返回true,否则就返回false。
首先声明一个变量strs,存储我们的目的字符串;利用for of循环字符串数组words,可以取到数组的每个元素,每次循环中,都把当前的元素拼接在strs中,然后判断当前的strs字符是否等于字符串s,若是等于就可以return true出去,若是不等于就继续循环,进入下一次循环,继续拼接字符串,再判断是否有strs会等于字符串s,循环如此操作,直到有相等的字符串strs出现;若是循环结束,还是没有就返回false。那么,这个字符串就不是这个数组的前缀了。

AC代码

function solution(s, words) {
    let strs = '';
    for(let item of words) {
        strs += item;
        if(strs === s) {
            console.log(true)
            return true;
        }
    }
    console.log(false)
    return false;
}
let s = "iloveleetcode", words = ["i","love","leetcode","apples"]
solution(s, words);