4

pangram 是一个包含字母表中的每个字母至少一次的句子。

到目前为止,这是我的代码:

const isPangram = (string) => {
    let alpha = string.toUpperCase().split("");
    for (let beta = 65; beta < 65 + alpha.length; beta++) {
        let gamma = String.fromCharCode(beta);
        if (alpha.includes(gamma)) {
            continue;
        }
        else {
            return false;
        }
    }
    return true;
}

console.log(isPangram("Detect Pangram"));

为什么“检测 Pangram”返回 true?

4

8 回答 8

4

您可以使用.every如下所示的非常简单的方式进行操作。

alphabets = 'abcdefghijklmnopqrstuvwxyz'.split("");

const isPangram = (string) => {
    string = string.toLowerCase();
    return alphabets.every(x => string.includes(x));
}

console.log(isPangram("Detect Pangram"));
console.log(isPangram("abcd efgh ijkl mnop qrst uvwx yz"));

every您可以从以下链接了解更多信息。

  1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
  2. https://www.w3schools.com/jsref/jsref_every.asp
于 2018-11-28T04:00:28.297 回答
3

您的方法是遍历字母表并验证目标字符串中是否存在每个字母 az。但是,除非输入字符串长度为 26,否则您的条件循环65 + alpha.length不会覆盖字母表的大小。从 65 迭代到 91(含)将解决问题。

这是另一个提取字母字符的解决方案,将它们放入一个集合并检查集合大小是否为 26。

const isPangram = s => new Set(s.toUpperCase().match(/[A-Z]/g)).size === 26;

[
  "Detect Pangram",
  "abcd efgh ijkl mnop qrst uvwx yz",
  "abcd efgh ijkl mnop qrst uvwx y",
  "bcd efgh ijkl mnop qrst uvwx yz",
  "abcdefghijklmnopqrstuvwxyy",
  "AbCdEfGhIjKlM zYxWvUtSrQpOn",
  "How quickly daft jumping zebras vex."
].forEach(test => console.log(`${isPangram(test)}\t${test}`));

于 2018-11-28T04:57:47.590 回答
3

您的错误是您一直在运行循环,直到字符串的长度不是 AZ。

希望这可以帮助。

const isPangram = (string) => {
  let alpha = string.toUpperCase().split("");
  for (let beta = 65; beta < 91; beta++) {
    let gamma = String.fromCharCode(beta);
    if (alpha.includes(gamma)) {
      continue;
    } else {
      return false;
    }
  }
  return true;
}

console.log(isPangram("Detect Pangram"));
console.log(isPangram("abcd efgh ijkl mnop qrst uvwx yz"));

https://jsfiddle.net/xjys9dat/ - 一个相同的工作示例

于 2018-11-28T04:49:37.910 回答
2

正则表达式方法:

function isPangram(str){
    var regex = /([a-z])(?!.*\1)/gi;
    return (str.match(regex) || []).length === 26;
}

console.log(isPangram('abcdEfgHijklmnOpqrStuvwxyZ943')); //true
console.log(isPangram('hello 049 ds')); //false

参考:Javascript Pangram 正则表达式

于 2018-11-28T04:16:30.217 回答
1

const isPangram = (string) => {
    let alpha = string.toUpperCase().split("");

    // corecteded the bounding condition in the loop
    for (let beta = 65; beta < 91; beta++) {
        
        let gamma = String.fromCharCode(beta);
        if (alpha.includes(gamma)) {
            continue;
        }
        else {
            return false;
        }
    }
    return true;
}

console.log(isPangram("Detect Pangram"));
console.log(isPangram("abcd efgh ijkl mnop qrst uvwx yz"));
console.log(isPangram("abcd efgh ijkl mnop qrst uvwx y"));
console.log(isPangram("bcd efgh ijkl mnop qrst uvwx yz"));

于 2018-11-28T05:18:00.867 回答
1

另一种方法:

const alphabets26 = 'abcdefghijklmnopqrstuvwxyz';
let input = prompt();
input = input.toLowerCase();
let icount = 0;

for (let i = 0; i < alphabets26.length; i++) {
  var letter = alphabets26[i];
  if (input.indexOf(letter) > -1)
    icount++;
}

if (icount == 26)
  alert('All letters found at least once');
else
  alert('Few letters missing');

于 2018-11-28T03:43:33.763 回答
0

如果您知道输入字符串只是严格的字母

const isPangram = sentence => new Set(sentence).size === 26;
console.log(isPangram("Detect Pangram"));
console.log(isPangram("abcd efgh ijkl mnop qrst uvwx yz"));
于 2022-01-28T19:16:38.720 回答
0

php中的一种方法是这样的:

function detect_pangram($input) { 
    $alphabet = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
    $isPangram = false;
    $array = str_split($input);
    foreach ($array as $char) {
    if (ctype_alpha($char)) {
    if (ctype_upper($char)) {
    $char = strtolower($char);
    }
    $key = array_search($char, $alphabet);
    if ($key !== false) {
    unset($alphabet[$key]);
    }
    }
    }
    if (!$alphabet) {
    $isPangram = true;
    }
    return $isPangram;
  }
于 2021-03-30T06:45:28.700 回答