gpt4 book ai didi

java - 高效的 Java 语言构造来检查字符串是否为 pangram?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:40 25 4
gpt4 key购买 nike

到目前为止,我已经想到了这个。我试图最小化字符串操作并将解决方案隔离到内置数据类型、数组和整数操作。

我正在寻找更优雅的方法来检查 pangram 字符串,在 java 中。

优雅,代码行最少,也欢迎使用其他高效算法。

请提供不含 lambda 表达式的建议。

    private static boolean isPangrams(String ip) {

char[] characterArray = ip.toLowerCase().toCharArray();
int map[] = new int[26];
int sum = 0;

for(char current : characterArray) {

int asciiCode = (int) current;
if (asciiCode >= 97 && asciiCode <= 122) {

if (map[122 - asciiCode] == 0) {

sum += 1;
map[122 - asciiCode] = 1;
}
}
}

return sum == 26;
}

最佳答案

您可以为此使用位运算:

private static boolean isPangrams(String ip) {
int flags = 0;
for(char current : ip.toLowerCase().toCharArray()) {
if (current >= 'a' && current <= 'z') {
flags |= 0x01<<(current-'a');
}
}
return flags == 0x3ffffff;
}

jDoodle

代码的工作原理如下:我们考虑一个 int,它是一个 32 位数字。最多 26 位的每一位都是一个标志(可以说是一个 boolean)。最初所有标志都是 false,因为我们用 0 初始化 flags

现在我们遍历字符串的字符。如果字符是小写字母,我们将相应标志的标志设置为true(不管之前是否设置为true)。

最后我们检查最低 26 位是否都设置为 true。如果是这样,flags 等于 0x3ffffff(这是一个十六进制数,等于 1111111111111111111111 二进制数。如果是这样,我们返回 true。否则我们返回 false

通常按位运算比 if 语句和 boolean 运算要快,所以我希望这个程序能快很多。

关于java - 高效的 Java 语言构造来检查字符串是否为 pangram?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37880301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com