JSFiddle - React, Tailwind, and code Playground

by Yurii Predborskyi

JavaScript

function process(pattern, string) {
  const dict = { '*': 0};
  for (let char of pattern) {
    dict[char] = (dict[char] || 0) + 1;
  }
  let unknowns = 0;
  for (let char of string) {
  	if (dict[char] && dict[char] > 0) {
    	dict[char]--;
    } else {
    	unknowns++;
    }
  }
  return unknowns <= dict['*'];
}

const tests = [
	{ inputs: ['abcdef', 'bac'], output: true },
	{ inputs: ['abcdef', 'bread'], output: false },
	{ inputs: ['abcdef*', 'bread'], output: true },
	{ inputs: ['abcdef*', 'breadd'], output: false },
	{ inputs: ['', 'breadd'], output: false },
	{ inputs: ['abcdef', ''], output: true },
	{ inputs: ['', ''], output: true },
];

for (let test of tests) {
	console.log('inputs', ...test.inputs);
  console.log('result', process(...test.inputs));
  console.log('expected', test.output);
}