Easy

题目描述

给定字符串数组 words 和字符串 s,判断 s 是否为 words 的首字母缩略词。

当字符串 s 可以由 words 中每个字符串的第一个字符按顺序连接形成时,s 被认为是 words 的首字母缩略词。例如,"ab" 可以由 ["apple", "banana"] 形成,但不能由 ["bear", "aardvark"] 形成。

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

示例 1:

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

示例 2:

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

示例 3:

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

约束条件:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 10
  • 1 <= s.length <= 100
  • words[i]s 由小写英文字母组成

解题思路

这道题要求我们检查字符串 s 是否为字符串数组 words 的首字母缩略词。

思路分析:

最直观的解法是提取每个单词的首字母,构成缩略词字符串,然后与目标字符串 s 比较。具体步骤如下:

  1. 长度检查:首先检查 s 的长度是否等于 words 数组的长度,如果不等则直接返回 false

  2. 逐字符比较:遍历 words 数组,取每个单词的第一个字符,与 s 中对应位置的字符进行比较。

  3. 返回结果:如果所有字符都匹配,返回 true;否则返回 false

这种方法的优点是逻辑清晰,易于理解。我们可以选择构建完整的缩略词字符串再比较,也可以边遍历边比较,后者在空间复杂度上更优。

推荐解法:使用边遍历边比较的方式,这样可以在发现不匹配时提前退出,同时节省空间。

代码实现

class Solution {
public:
    bool isAcronym(vector<string>& words, string s) {
        if (words.size() != s.size()) {
            return false;
        }
        
        for (int i = 0; i < words.size(); i++) {
            if (words[i][0] != s[i]) {
                return false;
            }
        }
        
        return true;
    }
};
class Solution:
    def isAcronym(self, words: List[str], s: str) -> bool:
        if len(words) != len(s):
            return False
        
        for i in range(len(words)):
            if words[i][0] != s[i]:
                return False
        
        return True
public class Solution {
    public bool IsAcronym(IList<string> words, string s) {
        if (words.Count != s.Length) {
            return false;
        }
        
        for (int i = 0; i < words.Count; i++) {
            if (words[i][0] != s[i]) {
                return false;
            }
        }
        
        return true;
    }
}
var isAcronym = function(words, s) {
    if (words.length !== s.length) {
        return false;
    }
    
    for (let i = 0; i < words.length; i++) {
        if (words[i][0] !== s[i]) {
            return false;
        }
    }
    
    return true;
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(n)其中 n 是 words 数组的长度,需要遍历每个单词取首字母
空间复杂度O(1)只使用常量级别的额外空间

相关题目