Java程序检查字符串是否为全字母句(Pangram)

版权申诉
0 下载量 122 浏览量 更新于2024-08-04 收藏 22KB DOCX 举报
在Java编程中,一个常见的任务是检查一个给定的字符串是否构成一个Pangram,即该字符串是否包含了英语字母表中的所有26个字母,不考虑字母的大小写。Pangram检测在编码挑战和语言学应用中都有所涉及,可以锻炼程序员对字符串处理和逻辑思维的能力。 **方法1:使用频率数组** 此方法首先将输入字符串转换为小写,以统一处理大小写问题。然后,创建一个长度为26的布尔数组(`present`),用于记录每个字母是否出现过。遍历字符串中的每个字符,如果字符是字母(使用`Character.isLetter()`函数检查),就在对应的数组位置设置为`true`。最后,遍历频率数组,如果所有元素均为`true`,则字符串是Pangram,输出"Yes";否则输出"No"。这种方法的时间复杂度为O(N),空间复杂度为O(26)。 ```java public static boolean allLetters(String str) { str = str.toLowerCase(); boolean[] present = new boolean[26]; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (isLetter(ch)) { present[ch - 'a'] = true; } } for (boolean b : present) { if (!b) { return false; } } return true; } ``` **方法2:使用遍历** 另一种方法是直接遍历字符串中的每个字符,同时遍历字母表,检查每个字母是否存在于字符串中。同样先将字符串转换为小写。对于字符串中的每个字符,如果它是一个字母,就检查在字母表中是否存在对应的字母。如果找到缺失的字母,立即返回"No";否则遍历完整个字母表后,返回"Yes"。这种方法的时间复杂度为O(26 * N),因为需要检查26次每个字符,但空间复杂度较低,为O(1)。 ```java public static boolean allLettersIterative(String str) { str = str.toLowerCase(); for (char ch = 'a'; ch <= 'z'; ch++) { if (!str.contains(Character.toString(ch))) { return false; } } return true; } ``` 总结来说,检查给定字符串是否是Java中的Pangram,可以使用两种主要方法:一种是通过频率数组统计每个字母出现情况,另一种是逐个字符与字母表对比。这两种方法都展示了Java编程中字符串操作和逻辑判断的基本技巧。对于初学者,理解并实现这些方法可以帮助他们更好地掌握基础编程概念。