DEV Community

Discussion on: Daily Challenge #219 - Compare Strings

Collapse
 
sabbin profile image
Sabin Pandelovitch • Edited

JS using a different approach, recursive function

The readable version

function strCompare(str, n, i = 0, c = 0) {
  const cond = str[i] === n ? c+1 : c;
  return i < str.length - 1 ? strCompare(str, n, i+1, cond) : cond;
}

One line version

const strCompare = (str, n, i = 0, c = 0) => (i < str.length - 1 ? strCompare(str, n, i+1, str[i] === n ? c+1 : c) : str[i] === n ? c+1 : c);
Collapse
 
aminnairi profile image
Amin

Actually, string[index out of bound] will return undefined so you don't need to check that your index is lower than the length of the string.

Also, you don't need to keep track of the characters' count if you just return it right in your recursive call.

And you can increment your index right when you access your character for comparison.

const strCount =
    (string, character, index = 0) =>
        string[index] === undefined
            ? 0
            : string[index++] === character
                ? 1 + strCount(string, character, index)
                : strCount(string, character, index);

If you are about the bytes, this makes it for a shorter version of your solution.

const count = (s, c, i = 0) => !s[i] ? 0 : s[i++] === c ? 1 + count(s, c, i) : count(s, c, i);
Collapse
 
sabbin profile image
Sabin Pandelovitch

You are right, thanks!