检查给定字符串是否为全字母句(Java)

2025 年 1 月 6 日 | 阅读 6 分钟

给定字符串 str,我们的任务是编写一个 Java 程序来确定提供的字符串是否为全字母句。如果字符串中包含所有字母字符,而不考虑其大小写(大写或小写),则该字符串称为全字母句。

示例 1

输入

String str = "abCDEfghIJKlmnoPQRStuvwxyZ"

输出

给定的字符串是全字母句。

解释

对于给定的字符串 "abCDEfghIJKlmnoPQRStuvwxyZ",所有 26 个字母都存在,不区分大小写。因此,给定的字符串是一个全字母句。

示例 2

输入

String str = "The five boxing wizards jump quickly."

输出

给定的字符串是全字母句。

解释

对于给定的字符串 "The five boxing wizards jump quickly",由于所有 26 个字母都存在,不区分大小写。因此,给定的字符串是一个全字母句。

示例 3

输入

String str = "Hello Welcome to the World"

输出

给定的字符串不是全字母句。

解释

对于给定的字符串 "Hello Welcome to the World",由于不包含所有 26 个字母。因此,给定的字符串不是全字母句。

方法:使用 Set

使用集合是有意义的,因为为了验证全字母句,必须存在所有 26 个字母,而不管字符是大写还是小写。字母已转换为小写,集合大小需要为 26 才能确定字母是否已存在。

算法

步骤 1: 初始化一个字符集。

步骤 2: 检查整个字符串并确保每个字符都存在。

步骤 3: 如果字符是小写字母,则插入到集合中。

步骤 4: 使用 tolower() 函数在插入任何大写字母之前将其转换为小写。

步骤 5: 最后,验证集合的大小是否为 26。如果正确,这表明字符串中使用了所有字母,无论是小写还是大写。

实施

文件名: ApproachSetPangram.java

输出

The given string is a Pangram.

复杂度分析

上述代码的时间复杂度为 O(N*logN),其中 'N' 表示字符串的长度,空间复杂度为 O(1)。

方法:使用哈希技术

创建一个布尔类型的 mark[] 数组,遍历字符串中的每个字符,并将每个字符标记为已访问。大小写字母被视为可互换的。因此,索引 0 用于表示“A”和“a”,索引 25 用于标记“Z”和“z”。一旦所有字符都已遍历,就确定所有字符是否都被标记。如果没有,则返回 false,因为这里没有全字母句;否则,返回 true。

算法

步骤 1: 最初,创建一个大小为 26 的布尔向量 mark[]。

步骤 2: 遍历字符串 s 中的每个字符,分别将 s[i] - "a" 或 s[i] - "A" 标记为 1(分别对应大写和小写)。

步骤 3: 遍历 mark 的每个索引一次。

步骤 3.1: 如果每个索引都被标记为已访问,则返回全字母句。

步骤 3.2: 否则返回“不是全字母句”。

实施

文件名

输出

The given string is a Pangram.

复杂度分析

时间复杂度为 O(N),其中 N 表示给定字符串的长度;空间复杂度为 O(1)。

方法:使用频率数组

算法

步骤 1: 将字符串中的所有字母转换为大写或小写。

步骤 2: 创建一个频率数组来指示从 a 到 z 的每个字母的频率。

步骤 3: 接下来,遍历频率数组,如果提供的字符串中缺少任何字母,则打印“否”,否则打印“是”。

实施

文件名: reqarrayApproachPangram.java

输出

The given string is a Pangram.

复杂度分析

时间复杂度为 O(N),其中 N 表示给定字符串的长度;空间复杂度为 O(1)。

方法:使用遍历

算法

步骤 1: 将 LettersPresent 标志的初始值声明为 true。

步骤 2: 对于每个字母,重复步骤 a 到 z。

步骤 2.1: 确定该字母是否存在于字符串中。

步骤 3: 如果缺少任何字母,则中断循环并将标志设置为 false。

步骤 4: 如果所有字母都存在,则打印“给定的字符串是全字母句”。

步骤 5: 否则,打印“给定的字符串不是全字母句”。

实施

文件名: TraversalApproachPangram.java

输出

The given string is a Pangram.

复杂度分析

时间复杂度为 O(26*N),其中 N 表示给定字符串的长度;空间复杂度为 O(1)。