首页 > 解决方案 > 是字符串数组 Pangrams

问题描述

如果字符串数组是包含字母 az 的 pangram,我正在尝试解决问题。如果字符串是 pangram,则返回 1,如果字符串不是 pangram,则返回 0。下面的代码检查字符串中的单个字母,但我遇到了检查每个字符串的问题。比如“The quick brown fox jumps over the lazy dog”是pangram,给1,“This is not a pangram”给0,for循环完成两个字符串的迭代后,应该返回10

function isPangram(string) {
  let result = []
  const letters = "abcdefghijklmnopqrstuvwxyz".split("")
  for (let i = 0; i < string.length; i++) {
    for (let j = 0; j < letters.length; j++) {
      if (string[i].includes(letters[i])) {
        result.push(1)
      }
      if (!string[i].includes(letters[i])) {
        result.push(0)
      }
    }
  }
  return result.join("")
}

console.log(isPangram(["The quick brown fox jumps over the lazy dog", "This is not a pangram"]))

标签: javascript

解决方案


如果您要让函数处理字符串数组,那么您可以将数组作为函数的参数,就像您现在正在做的那样,然后对给定的参数执行迭代,以检查是否该字符串是 pangram,如果是这种情况,则将 1 附加到一个字符串,最终返回该字符串。

我还建议使用正则表达式来检查您的字符串是否为 pangram(归功于答案)。

function isPangram(strArray){ 
    var resultStr = "";
    let reg = /(?=.*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)./i 
    strArray.forEach(function(e) {
        //The value of res is determined by the outcome of the regex check, through a ternary operator
        let res = (reg.test(e)) ? "1" : "0";
        resultStr += res;
    })

    return parseInt(resultStr);
}

console.log(isPangram(["The quick brown fox jumps over the lazy dog","This is not a pangram"]))

如果您希望将结果作为字符串,您可以resultStr从函数中解包。parseInt()

或者,如果您想保留当前的循环结构,您可以将and所有结果放在一起,并将最终获得的结果添加到字符串中:

function isPangram(strArray) {

var resStr = "";
const letters = "abcdefghijklmnopqrstuvwxyz".split("");

for (let i in strArray) {
    var tempRes = true;
    for (j in letters) {
        tempRes = tempRes & (strArray[i].toLowerCase().includes(letters[i]))
    }
    resStr += tempRes;
}

return resStr
}

console.log(isPangram(["THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG", "This is not a pangram"]))

正如@Johnny Mop 所指出的那样,如果您改为使用条件(strArray[i].includes(letters[i]))来确定第一次0获得 a 的时间,则可以break通过循环来节省一些时间(在这种情况下并不是很多)。而且他正确地指出你需要toLowerCase(),否则THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG不会导致 pangram 。


推荐阅读