检查字符串中两个字符之间的长度

时间:2021-07-21 23:51:28

标签: javascript string loops

所以我已经在这个编码挑战上工作了大约一天,我仍然觉得我没有触及表面,即使它应该很容易。问题要求我们取一个字符串参数,如果字母'a'和'b'之间正好有3个字符(不包括空格),则应该为真。

示例:Input: "maple bread"; Output: false // Because there are > 3 places

Input: "age bad"; Output: true // Exactly three places in between 'a' and 'b'

以下是我所写的,虽然它尚未完成,而且很可能是写错了方向:

function challengeOne(str) { 
let places = 0;
 for (let i=0; i < str.length; i++) {
   if (str[i] != 'a') {
     places++
   } else if (str[i] === 'b'){    
   }
 }
console.log(places)
}

所以我的想法是在字母 'a' 之后开始计算位置,直到它到达 'b',然后它会返回位置的数量。然后我会开始另一个流程,如果 'places' > 3,则返回 false 或者如果 'places' === 3,则返回 true。

但是,尝试第一个流只会返回不是“a”的地方的总数。我正在使用 console.log 而不是返回来测试它是否有效。

我只是想朝正确的方向推动,如果有我可能缺少的方法,或者是否有其他类似的例子。我觉得解决方案很简单,但我似乎无法掌握。

编辑:

我从这个挑战中休息了一下,这样我就可以用全新的眼光看待它,并且能够快速解决它!我查看了每个人的建议并应用它,直到找到解决方案。这是有效的新代码:

function challengeOne(str) { 
  // code goes here  
str = str.replace(/ /g, '')
let count = Math.abs(str.lastIndexOf('a')-str.lastIndexOf('b'));
if (count === 3) {
  return true 
} else return false

}

感谢您的所有投入!

4 个答案:

答案 0 :(得分:0)

这里有一个更有效的方法 - 只需找到字母 ab 的索引并检查两者相减的绝对值是否为 4(因为索引为 0 索引):

function challengeOne(str) {
  return Math.abs(str.indexOf("a") - str.indexOf("b")) == 4;
}

console.log(challengeOne("age bad"));
console.log(challengeOne("maple bread"));

<块引用>

如果正好有 3 个字符(不包括空格)

只需通过 String#replace 删除所有空格,然后执行检查:

function challengeOne(str) {
  return str = str.replace(/ /g, ''), Math.abs(str.indexOf("a") - str.indexOf("b")) == 4;
}

console.log(challengeOne("age bad"));
console.log(challengeOne("maple bread"));

参考文献:

答案 1 :(得分:0)

我假设空格,并且您的示例似乎表明了这一点,尽管您的问题另有说明。如果是这样,这里的推送应该会有所帮助。你说得对,有一些用于字符串的 JavaScript 方法,包括一种可以帮助您找到给定字符串中 a 和 b 的索引(位置)的方法。

试试这里: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#instance_methods

答案 2 :(得分:0)

这是另一种方法:这种方法排除了 OP 中的空格,因此输出反映了这一点。如果要包含空格,则可以删除该行。

function challengeOne(str) {
  //strip spaces
  str = str.replace(/\s/g, '');
  //take just the in between chars 
  let extract = str.match(/a(.*)b/).pop();
  return extract.length == 3
}

console.log(challengeOne('maple bread'));
console.log(challengeOne('age bad'));

答案 3 :(得分:0)

你可以递归:

  1. 检查字符串是否以'a'开头并以'b'结尾并检查长度
  2. 继续向左或向右(或同时)剪切字符串,直到中间有 3 个字符或字符串为空。

示例:

maple bread
aple brea
aple bre
aple br
aple b
ple 
le

FALSE

age bad
age ba
age b

TRUE

const check = (x, y, z) => str => {
  const exec = s => {
    const xb = s.startsWith(x);
    const yb = s.endsWith(y);
    return ( !s                             ? false
           : xb && yb && s.length === z + 2 ? true
           : xb && yb                       ? exec(s.slice(1, -1))
           : xb                             ? exec(s.slice(0, -1))
                                            : exec(s.slice(1)));
  };
  return exec(str);
}

const challenge = check('a', 'b', 3);

console.log(`
  challenge("maple bread"): ${challenge("maple bread")}
  challenge("age bad"): ${challenge("age bad")}
  challenge("aabab"): ${challenge("aabab")}
`)

相关问题