返回介绍

solution / 1900-1999 / 1961.Check If String Is a Prefix of Array / README

发布于 2024-06-17 01:03:12 字数 3568 浏览 0 评论 0 收藏 0

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

English Version

题目描述

给你一个字符串 s 和一个字符串数组 words ,请你判断 s 是否为 words前缀字符串

字符串 s 要成为 words前缀字符串 ,需要满足:s 可以由 words 中的前 kk正数 )个字符串按顺序相连得到,且 k 不超过 words.length

如果 swords前缀字符串 ,返回 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 <= 100
  • 1 <= words[i].length <= 20
  • 1 <= s.length <= 1000
  • words[i]s 仅由小写英文字母组成

解法

方法一:遍历

我们遍历数组 $words$,用一个变量 $t$ 记录当前已经拼接的字符串,如果 $t$ 的长度大于 $s$ 的长度,说明 $s$ 不是 $words$ 的前缀字符串,返回 $false$;如果 $t$ 的长度等于 $s$ 的长度,返回 $t$ 是否等于 $s$。

遍历结束后,如果 $t$ 的长度小于 $s$ 的长度,说明 $s$ 不是 $words$ 的前缀字符串,返回 $false$。

时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是字符串 $s$ 的长度。

class Solution:
  def isPrefixString(self, s: str, words: List[str]) -> bool:
    n, m = len(s), 0
    for i, w in enumerate(words):
      m += len(w)
      if m == n:
        return "".join(words[: i + 1]) == s
    return False
class Solution {
  public boolean isPrefixString(String s, String[] words) {
    StringBuilder t = new StringBuilder();
    for (var w : words) {
      t.append(w);
      if (t.length() > s.length()) {
        return false;
      }
      if (t.length() == s.length()) {
        return s.equals(t.toString());
      }
    }
    return false;
  }
}
class Solution {
public:
  bool isPrefixString(string s, vector<string>& words) {
    string t;
    for (auto& w : words) {
      t += w;
      if (t.size() > s.size()) {
        return false;
      }
      if (t.size() == s.size()) {
        return t == s;
      }
    }
    return false;
  }
};
func isPrefixString(s string, words []string) bool {
  t := strings.Builder{}
  for _, w := range words {
    t.WriteString(w)
    if t.Len() > len(s) {
      return false
    }
    if t.Len() == len(s) {
      return t.String() == s
    }
  }
  return false
}
function isPrefixString(s: string, words: string[]): boolean {
  const t: string[] = [];
  const n = s.length;
  let m = 0;
  for (const w of words) {
    m += w.length;
    if (m > n) {
      return false;
    }
    t.push(w);
    if (m === n) {
      return s === t.join('');
    }
  }
  return false;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文