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

问题描述 投票:0回答:6

这是我发现的最简单的代码。对于给定的字符串,它返回true或false,提示字符串包含或不包含所有字母。

new Set(“any 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

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

谢谢!

javascript string alphabet
6个回答
3
投票

You don't need to 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
投票

我相信这是“最简单的”w.r.t.计算复杂性,需要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) );
    }
}

1
投票

当我再次看到它时,我可以为您的代码提供一个小小的改进:

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

删除正则表达式中的“i”标志,因为它是小写的。


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))

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

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

谢谢!


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'))
© www.soinside.com 2019 - 2024. All rights reserved.