Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

String Match challenge in Javascript

if anybody can point or just give a clue what I did wrong, would be very much appreciated. So the task is :

Given 2 strings, a and b, return the number of the positions where
they contain the same length 2 substring. So "xxcaazz" and "xxbaaz"
yields 3, since the "xx" "xx", "aa", and "az" substrings appear in the
same place in both strings.

function(‘xxcaazz’, ‘xxbaaz’) should return 3

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

function(‘abc’, ‘abc’) should return 2

function(‘abc’, ‘axc’) should return 0

My code:

function stringMatch(a, b){

//  convert both strings to arrays with split method

  let arrA = a.split("")
  let arrB = b.split("")

//  create 2 empty arrays to feel in with symbol combinations

  let arrOne = [];
  let arrTwo = [];

// loop through the first array arrA and push elements to empty arrayOne

  for ( let i = 0; i < arrA.length ; i++ ) {
      arrOne.push(arrA[i]+arrA[i+1])
  }
// loop through the first array arrB and push elements to empty arrayTwo

  for ( let i = 0; i < arrB.length ; i++ ) {
      arrTwo.push(arrB[i]+arrB[i+1])
  }
//  create a new array of the matching elements from arrOne and arrTwo

  let newArray = arrOne.filter(value => arrTwo.includes(value))

//   return the length 0f the newArray - that's supposed to be the answer

  return newArray.length
}

Thanks for help!

>Solution :

On the last iteration of your loops, there won’t be "next" character, arrB[i+1] will be undefined. The easiest way to solve that is to only loop until the second to last character, or until i < arrB.length - 1.

for ( let i = 0; i < arrB.length - 1; i++ ) {
      arrTwo.push(arrB[i]+arrB[i+1])
  }

e.g…

console.log(stringMatch('xxcaazz', 'xxbaaz')); //should return 3
console.log(stringMatch('abc', 'abc')); // should return 2
console.log(stringMatch('abc', 'axc')); //should return 0

function stringMatch(a, b){

//  convert both strings to arrays with split method

  let arrA = a.split("")
  let arrB = b.split("")

//  create 2 empty arrays to feel in with symbol combinations

  let arrOne = [];
  let arrTwo = [];

// loop through the first array arrA and push elements to empty arrayOne

  for ( let i = 0; i < arrA.length -1 ; i++ ) {
      arrOne.push(arrA[i]+arrA[i+1])
  }
// loop through the first array arrB and push elements to empty arrayTwo

  for ( let i = 0; i < arrB.length - 1; i++ ) {
      arrTwo.push(arrB[i]+arrB[i+1])
  }
  
//  create a new array of the matching elements from arrOne and arrTwo

  let newArray = arrOne.filter(value => arrTwo.includes(value))

//   return the length 0f the newArray - that's supposed to be the answer

  return newArray.length
}

As a bonus, here’s my own solution…

console.log(stringMatch('xxcaazz', 'xxbaaz')); //should return 3
console.log(stringMatch('abc', 'abc')); // should return 2
console.log(stringMatch('abc', 'axc')); //should return 0

function stringMatch(a, b){
  var matches = 0;
  for(let i=a.length-1; i--;){
    let s1 = a.substring(i, i+2);
    let s2 = b.substring(i, i+2);
    if(s1 == s2) matches++;
  }
  return matches;
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading