我怎么知道字符串中的字符在内置通配符时是否重复了相同的次数?

How can I know if the characters of a string repeat themselves the same amount of times when they have a wildcard built-in?

示例:

推理:

这是我到目前为止的情况:

const testing = string => {
    var array = []; //array with each character without repeating
    var array_R = []; //array with the value the value that each character repeats itself
    var array_C = 0; //counter for the size of "array"
    
    //getting the character without repeating
    for (var i = 0; i < string.length; i++) {
      if (!array.includes(string.charAt(i))) {
        array[array_C] = string.charAt(i);
        array_R[array_C] = 0;
        array_C++;
      }
    }
    
    //how many each character repeats itself
    for (var i = 0; i < array.length; i++) {
      for (var j = 0; j < string.length; j++) {
        if(array[i] == string.charAt(j)){
          array_R[i] = array_R[i] + 1;
        }
      }
    }
}

我真的不知道如何从这里开始。

首先统计每个非*字符在对象或Map中出现的次数。找到该集合中的最大值,然后找到最大值与每个值之间的所有差异的总和。如果星号的个数与差之和相同,则满足重复条件

你还必须考虑这样的情况,即在所有孔都被填满以使值相等之后还剩下更多的星号 - 算出剩下多少,看看它是否平均划分了分隔字符。

const testing = (str) => {
  const grouped = {};
  for (const char of str) {
    if (char !== '*') grouped[char] = (grouped[char] || 0) + 1;
  }
  const values = Object.values(grouped);
  const numOfSeparateChars = values.length;
  const max = Math.max(...values);
  const sum = values.reduce((a, b) => a + b, 0);
  const sumOfDifferencesFromMax = max * numOfSeparateChars - sum;
  const numberAsterisks = (str.match(/\*/g) || []).length;
  const remainingAsterisks = sumOfDifferencesFromMax - numberAsterisks;
  // Now all characters have been filled in to make the values even
  // eg: 'abcc**' -> 'abccab'
  // But there may be more asterisks
  // eg: 'abcc*****' -> 'abccaabbc'
  return remainingAsterisks % numOfSeparateChars === 0;
};
console.log(testing("xyzy**"));
console.log(testing("xyzy*"));