使用JavaScript检查字符串是否包含所有字母的最简单代码

时间:2019-03-23 06:45:34

标签: javascript string alphabet

这是我找到的最简单的代码。对于给定的字符串,它返回true或false,其中提到该字符串是否包含所有字母。

新设置(“任意字符串” .toLowerCase()。replace(/ [^ a-z] / g,“”)).size === 26

示例:

new Set("A quick brown fox jumps over the lazy dog"
    .toLowerCase()
    .replace(/[^a-z]/g, ""))
    .size === 26

任何其他最简单的代码形式都可能有帮助。请分享。

谢谢!

7 个答案:

答案 0 :(得分:3)

您不需要split

事实证明,在将字符串传递到String#split之前,无需运行new SetSet的构造函数在传递字符串时,实际上会在创建集合之前将其拆分为单个字符。

示例:

new Set('A quick brown fox jumps over the lazy dog'
  .toLowerCase()
  .replace(/[^a-z]/g, '')
).size === 26

这同样有效,因为类似new Set('test')的东西变成了

Set(3) {"t", "e", "s"}

在旁注中,您可以看到我从正则表达式中删除了 i 标志,这是由其他答案之一指出的,因为由于.toLowerCase()

答案 1 :(得分:1)

这是我找到的最简单的代码,它针对给定的字符串返回true或false,其中提到该字符串是否包含所有字母。

new Set("<your_string>".toLowerCase().replace(/[^a-z]/g, "") ).size === 26

示例:

new Set("A quick brown fox jumps over the lazy dog".toLowerCase().replace(/[^a-z]/g, "") ).size === 26

任何其他最简单的代码形式都可能有帮助。请分享。

谢谢!

答案 2 :(得分:1)

我认为这是“最简单”的做法计算复杂度,只需要O(1)空间(假设固定的上限输入字母,就可以存储字符频率表)和O(n)时间,因为它仅对输入字符串进行一次迭代(加上一个恒定时间)最终检查alphabet字符串)。

var inputString = "Jaded zombies acted quaintly but kept driving their oxen forward";

var charCounts = {};
for( var i = 0; i < inputString.length; i++ ) {
    var c = inputString.at( i ).toLower();
    if( charCounts[c] ) charCounts[c]++;
    else                charCounts[c] = 1;
}

var alphabet = "abcdefghijklmnopqrstuvwyz";
for( var a = 0; a < alphabet.length; a++ ) {
    if( !charCounts[ alphabet.at(a) ] ) {
        console.log( "char %s does not appear in input string.", alphabet.at(a) );
    }
}

答案 3 :(得分:1)

您可以避免使用正则表达式,并且一旦所有字母都带有类似的内容,也可以从函数中早返回。它会创建一组所有字母,并在找到它们时将其删除。一旦集合为空,您可以返回。如果循环结束,则不会删除所有内容。这只需要用于字母表集的空间,并且由于设置操作是恒定时间,因此在最坏的情况下为O(n)。

function allLetters(str){
    let alpha = new Set("abcdefghijklmnopqrstuvwxyz")
    for (let c of str.toLowerCase()){
        alpha.delete(c)
        if (alpha.size == 0) return true
    }
    return false
}

let text = "hello my name if gunther"
let text2 = "The quick brown fox jumps over the lazy dog"

console.log(allLetters(text))
console.log(allLetters(text2))

答案 4 :(得分:1)

再次查看时,我可以对您的代码进行一点改进:

new Set("<your_string>".toLowerCase().replace(/[^a-z]/g, "").split("")).size === 26 .

删除正则表达式上的'i'标志,因为它是小写字母。

答案 5 :(得分:0)

以下是使用String.fromCharCode()every()的另一种方法

const allLetters = (str) => Array.from({length:26}).map((x,i) => String.fromCharCode(i+97)).every(a => str.toLowerCase().includes(a));
console.log(allLetters("abcdefghijklmnopqrstuvwxyz"));

或者您可以对所有字母进行硬编码。

const allLetters = (str) => [..."abcdefghijklmnopqrstuvwxyz"].every(x => str.toLowerCase().includes(x));

console.log(allLetters('abcdefghijklmnopqrstuvwxyz'))
console.log(allLetters('abcdefghijklmnopqyz'))

答案 6 :(得分:0)

function isPangram(sentence){
   let lowerCased = sentence.toLowerCase();
   for(let char of 'abcdefghijklmnopqrstuvwxyz'){
      if(!lowerCased.includes(char)){
         return false
       }
    }
  return true
}

这是使用for ... of循环的另一种方法。