题目:
给你一个字符串数组 words
和一个字符串 s
,请你判断 s
是不是 words
的 首字母缩略词 。
如果可以按顺序串联 words
中每个字符串的第一个字符形成字符串 s
,则认为 s
是 words
的首字母缩略词。例如,"ab"
可以由 ["apple", "banana"]
形成,但是无法从 ["bear", "aardvark"]
形成。
如果 s
是 words
的首字母缩略词,返回 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" 是首字母缩略词。
words
数组中有三个字符串,"alice" 的首字母是 'a',"bob" 的首字母是 'b',"charlie" 的首字母是 'c'。- 按照顺序组合这三个首字母得到字符串 "abc",与给定的字符串
s
相等,所以返回true
。
示例 2
输入:words = ["an", "apple"], s = "a"
输出:false
解释:words 中 "an" 和 "apple" 的第一个字符分别是 'a' 和 'a'。
串联这些字符形成的首字母缩略词是 "aa"。
因此,s = "a" 不是首字母缩略词。
words
数组中有两个字符串,"an" 的首字母是 'a',"apple" 的首字母也是 'a'。- 按照顺序组合这两个首字母得到字符串 "aa",与给定的字符串
s
不相等,所以返回false
。
示例 3
输入:words = ["never", "gonna", "give", "up", "on", "you"], s = "ngguoy"
输出:true
解释:串联数组 words 中每个字符串的第一个字符,得到字符串 "ngguoy"。
因此,s = "ngguoy" 是首字母缩略词。
words
数组中有六个字符串,"never" 的首字母是 'n',"gonna" 的首字母是 'g',"give" 的首字母也是 'g',"up" 的首字母是 'u',"on" 的首字母是 'o',"you" 的首字母是 'y'。- 按照顺序组合这六个首字母得到字符串 "ngguoy",与给定的字符串
s
相等,所以返回true
。
提示详解
-
提示 1:
1 <= words.length <= 100
words
数组的长度在1
到100
之间,这意味着最多有100
个字符串需要检查。
-
提示 2:
1 <= words[i].length <= 10
words
数组中每个字符串的长度在1
到10
之间,这确保每个字符串至少有一个字符,而最多有10
个字符。
-
提示 3:
1 <= s.length <= 100
- 字符串
s
的长度在1
到100
之间,这表明如果words
数组长度接近于100
,则生成的首字母缩略词长度最多为100
。
- 字符串
-
提示 4:
words[i] 和 s 由小写英文字母组成
- 所有字符串仅由小写英文字母组成,避免了大小写混淆以及其他字符的使用。
-
创建一个空字符串,用于保存每个单词的首字母。
-
遍历输入的单词列表,将每个单词的首字母添加到我们在第一步中创建的字符串中。可以通过获取每个单词的第一个字符(索引为0的字符)来得到首字母。
-
遍历结束后,我们会得到一个由每个单词首字母组成的新字符串。
-
最后,我们就可以将这个新字符串与输入的字符串
s
进行比较。如果它们完全相同,则说明s
是单词列表的首字母缩略词,返回true
;如果不相同,则说明s
不是首字母缩略词,返回false
。 -
整个过程的时间复杂度为O(n),其中n是单词列表中的单词数量,因为我们需要遍历单词列表来
代码:
class Solution {
public boolean isAcronym(List<String> words, String s) {
// 遍历
int n = words.size();
if(n != s.length()) return false;
for(int i = 0; i < n; ++i){
if(words.get(i).charAt(0) != s.charAt(i)) return false;
}
return true;
}
}
知识点讲解:
-
字符串处理:操作和处理字符串是此题解中的关键部分,包括访问字符串的首字符和构建新字符串。
-
循环结构:使用循环遍历列表中的每个字符串,这是处理集合中元素的常用方法。
-
字符串比较:通过
equals
方法比较两个字符串是否相等。这是判断两个字符串内容是否完全相同的标准做法。 -
StringBuilder:在构建新字符串时使用
StringBuilder
以提高性能。相比于直接用字符串连接操作(+),StringBuilder
在循环中对字符串进行拼接时更加高效。 -
数组与列表处理:遍历数组或列表并提取信息是解决此类问题的常见步骤。
-
条件语句:使用条件判断(if-else)来决定何时返回
true
或false
。
以下表格总结了代码中用到的知识点:
知识点 | 描述 | 应用 |
---|---|---|
字符串处理 | 操作和处理字符串来访问特定的字符或构建新的字符串字符串。 | 获取每个单词的首字符;使用StringBuilder 拼接字符。 |
循环结构 | 使用循环结构遍历集合或数组中的元素。 | 遍历words 列表中的每个单词来提取并拼接它们的首字母。 |
字符串比较 | 检查两个字符串是否相等。 | 使用.equals() 方法比较生成的首字母缩略词和给定的字符串s 是否相同。 |
StringBuilder | 提供了一个可变的字符序列。用于在循环中高效地构建和修改字符串。 | 创建一个StringBuilder 实例用于拼接首字母,最终通过.toString() 转换为字符串。 |
数组与列表处理 | 处理一系列数据时,经常会存储在数组或列表结构中,并需要遍历它们以处理每个元素。 | 遍历输入的单词列表words 。 |
条件语句 | 根据条件执行不同的代码块,通常用于决策制定。 | 根据生成的字符串和s 的比较结果返回true 或false 。 |