本文最后更新于 2024-07-19,文章内容可能已经过时。

题目

给你一个字符串数组 words 和一个字符串 s ,请你判断 s 是不是 words首字母缩略词

如果可以按顺序串联 words 中每个字符串的第一个字符形成字符串 s ,则认为 swords 的首字母缩略词。例如,"ab" 可以由 ["apple", "banana"] 形成,但是无法从 ["bear", "aardvark"] 形成。

如果 swords 的首字母缩略词,返回 true ;否则,返回 false

 

示例 1:

输入:words = ["alice","bob","charlie"], s = "abc"
输出:true
解释:words 中 "alice"、"bob" 和 "charlie" 的第一个字符分别是 'a'、'b' 和 'c'。因此,s = "abc" 是首字母缩略词。 

示例 2:

输入:words = ["an","apple"], s = "a"
输出:false
解释:words 中 "an" 和 "apple" 的第一个字符分别是 'a' 和 'a'。
串联这些字符形成的首字母缩略词是 "aa" 。
因此,s = "a" 不是首字母缩略词。

示例 3:

输入:words = ["never","gonna","give","up","on","you"], s = "ngguoy"
输出:true
解释:串联数组 words 中每个字符串的第一个字符,得到字符串 "ngguoy" 。
因此,s = "ngguoy" 是首字母缩略词。 

 

提示:

  • 1 <= words.length <= 100

  • 1 <= words[i].length <= 10

  • 1 <= s.length <= 100

  • words[i]s 由小写英文字母组成

答案代码

"""
示例 1:
输入:words = ["alice","bob","charlie"], s = "abc"
输出:true
解释:words 中 "alice"、"bob" 和 "charlie" 的第一个字符分别是 'a'、'b' 和 'c'。因此,s = "abc" 是首字母缩略词。

示例 2:
输入:words = ["an","apple"], s = "a"
输出:false
解释:words 中 "an" 和 "apple" 的第一个字符分别是 'a' 和 'a'。
串联这些字符形成的首字母缩略词是 "aa" 。
因此,s = "a" 不是首字母缩略词。

示例 3:
输入:words = ["never","gonna","give","up","on","you"], s = "ngguoy"
输出:true
解释:串联数组 words 中每个字符串的第一个字符,得到字符串 "ngguoy" 。
因此,s = "ngguoy" 是首字母缩略词。

提示:
1 <= words.length <= 100
1 <= words[i].length <= 10
1 <= s.length <= 100
words[i] 和 s 由小写英文字母组成
"""


class Solution(object):
    def isAcronym(self, words, s):
        """
        :type words: List[str]
        :type s: str
        :rtype: bool
        """
        # 检查 s 的长度是否与 words 的数量匹配
        if len(words) != len(s):
            return False

        # 比较每个单词的首字母与 s 中对应的字符
        for i in range(len(words)):
            if words[i][0] != s[i]:
                return False
        return True


if __name__ == '__main__':
    print(Solution().isAcronym(words=["alice", "bob", "charlie"], s="abc"))
    print(Solution().isAcronym(words=["an", "apple"], s="a"))
    print(Solution().isAcronym(words=["never", "gonna", "give", "up", "on", "you"], s="ngguoy"))
    print(Solution().isAcronym(words=["a", "b", "c"], s="abcd"))

结果分析

时间复杂度:在最坏的情况下,isAcronym函数需要遍历words列表中的每个单词,并检查其第一个字符是否与s中的相应字符匹配。这种情况发生在words中的所有单词都是单字符的情况下。如果words列表的长度为n,那么时间复杂度为O(n)。然而,在实际情况中,单词的长度通常不止一个字符,因此平均情况下,时间复杂度会更低。

空间复杂度:isAcronym函数只使用了常数级别的额外空间,用于存储循环变量i。因此,空间复杂度为O(1)