搜索重复的字符串

时间:2019-05-03 04:46:33

标签: javascript

Lilah的字符串s由小写英文字母组成,她重复了无数次。

给出一个整数n,查找并打印Lilah无限字符串的前'a'个字母中的字母n的数量。

这是我的解决方案,但这是不正确的,我正在努力找出原因:

function repeatedString(s, n) {
  let counter = 0;
  const remainder = n % s.length;
  const substring = s.substring(0, remainder);
  const concatString = s + substring;

  for (let letter of concatString) {
    if (letter === 'a') {
      counter++;
    }
  }
  return (counter * n);
}


const str = "dhfgjhdfoiahwiuerhiguhzlkjvxzlkjghatriaeriaauih";
console.log(
  repeatedString(str, 20)
);

5 个答案:

答案 0 :(得分:0)

我认为可能是

  

const concatString = s +子字符串;

请您直接引用子字符串...

  for (let letter of substring) {
    if (letter === 'a') {
      counter++;
    }
  }
  return counter

答案 1 :(得分:0)

您只需要遍历s.substring(0, n)并返回counter值,(counter * n)就没有任何意义。

function repeatedString(s, n) {
  let counter = 0;
  //const remainder = n % s.length;
  const substring = s.substring(0, n);
  console.log(substring);
  //const concatString = s + substring;

  for (let letter of substring) {
    if (letter === 'a') {
      counter++;
    }
  }
  return counter;
}


const str = "dhfgjhdfoiahwiuerhiguhzlkjvxzlkjghatriaeriaauih";
console.log(
  repeatedString(str, 20)
);

答案 2 :(得分:0)

您可以按照以下步骤进行操作:

  • 获取给定字符串中字母的计数。即c1
  • 然后使用slice()获取子字符串的一部分。该部分将从0开始,到字符串nlength的其余部分为止。(c2
  • 然后将c1乘以给定字符串在长度为n的字符串中的次数。即c1 * Math.floor(n/str.length)
  • 将其余c2的其他计数添加到结果中并返回

您可以使用filter()进行操作,并检查给定字符串中给定字母的计数。然后将其乘以无次数,字符串将重复长度n

function func(str,l,n){
  let c1 = [...str].filter(x => x === l).length;
  let c2 = [...str.slice(0,n%str.length)].filter(x => x === l).length;
  return (c1 * Math.floor(n/str.length)) + c2; 
}

console.log(func('abcac','a',10))

答案 3 :(得分:0)

使用下一个链接作为问题的来源:

https://medium.com/@yashka.troy/want-to-know-the-major-player-in-programming-18f2d35d91f7

哪里有更好的解释?

  

Lilah的字符串s由小写英文字母组成,她重复了无数次。

     

给出一个整数n,查找并打印Lilah无限字符串的前几个字母中的字母a's的数量。

     

例如,如果字符串s=’abcac’n=10,则我们考虑的子字符串为‘abcacabcac’,即其无限字符串的前10个字符。子字符串中有4个事件a

解决方案可能是:

function repeatedString(s, n)
{
    let res = 0;
    const remainder = s.slice(0, n % s.length);

    // Get number of times 'a' is present on "n / s.length" repetitions.

    for (let letter of s)
    {
        if (letter === 'a') res++;
    }
    
    res *=  Math.floor(n / s.length);

    // Add the number of times 'a' is present on the remainder.
    
    for (let letter of remainder)
    {
        if (letter === 'a') res++;
    }

    return res;
}

const str = "abca";
console.log(`${repeatedString(str, 10)} a's on first 10 letters:`);
console.log(`${repeatedString(str, 4)} a's on first 4 letters:`);
console.log(`${repeatedString(str, 0)} a's on first 0 letters:`);
console.log(`${repeatedString(str, 22)} a's on first 22 letters:`);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

答案 4 :(得分:0)

这应该为您提供次的次数 a 出现在 n 长度的数字中

const input = s;

var subStr = input.substr(0,n).split('');
console.log(subStr);

var output = 0;

subStr.forEach((e) => { 
    if (e === 'a') {
        console.log(e);
        output++;
    }
})
console.log(output);