Как я могу проверить, может ли объединение двух смежных дублированных символов в слове дать конкретное c слово? - PullRequest
1 голос
/ 02 апреля 2020

Я хотел бы проверить, может ли слово2 генерироваться из слова1, если я объединю 2 смежных дублированных символа в слове 1.

Например:

word1 = 'peete'
word2 = 'pete' //OK, because merging ee into e in word1 produces word2

word1 = 'peetee'
word2 = 'peete'

word1 = 'meet'
word2 = 'met'

У меня пока что есть, но происходит сбой при некоторых входах:

let checkMerge = (word1, word2) => {
  let charArr = word1.split('');
  let resultArr = [];
  let needToMerge = '';
  for (let i = 0; i < charArr.length; ++i) {
    if (charArr[i] == charArr[i + 1]) continue
    resultArr.push(charArr[i]);
  }
  let resultWord = resultArr.join('');
  if (resultWord == word2) {
    console.log(`JOIN ${needToMerge}`);
  } else {
    console.log(`something's wrong`)
  }
}

checkMerge('peete', 'pete'); //correct
checkMerge('peetee', 'peete'); //fails
checkMerge('meet', 'met'); //correct

Мне также нужно получить персонажа, которого мне нужно объединить (let needToMerge = '';), но я не могу понять это правильно. Таким образом, окончательный результат должен быть таким: 'JOIN char' Что мне делать по-другому? Спасибо.

РЕДАКТИРОВАТЬ:

еще несколько уточнений: function checkMerge занимает два слова, word1 и word2. Я должен проверить, можно ли получить word2 из word1 не более чем одним слиянием. word2 не может быть изменено, только word1 одним слиянием. Функция должна возвращать "JOIN c", если word2 может быть получено из word1, путем слияния двух соседних символов в word1 (выполняется ровно одно слияние).

Например: учитывая word1 = 'peetee' и word2 = 'peete', функция должна возвращать 'JOIN e', поскольку, если мы объединяем последние два символа (ee) word1, мы получаем 'peete', которое равно word2.

с учетом word1 = 'peetee' и word2 = 'petee', функция должна возвращать 'JOIN e', поскольку, если мы объединяем первые дублированные символы (ee) word1, мы получаем 'petee', равное word2.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Вы можете заменить повторяющийся символ одним символом и затем сопоставить.

let checkMerge = (word1, word2) => {
  word1 = word1.replace(/([a-z])\1+/g,"$1")
  word2 = word2.replace(/([a-z])\1+/g,"$1")
  return word1.indexOf(word2) !== -1
}

console.log(checkMerge('peete', 'pete')); //correct
console.log(checkMerge('peetee', 'peete')); //correct
console.log(checkMerge('meet', 'met')); //correc
console.log(checkMerge('meete', 'meta'));    // false

let checkMerge2 = (word1, word2) => {
  word1 = word1.replace(/([a-z])\1+/g,"$1")
  return word1.indexOf(word2) !== -1
}

console.log(checkMerge2('peete', 'pete')); //correct
console.log(checkMerge2('peetee', 'peete')); //fail
console.log(checkMerge2('meet', 'met')); //correc
console.log(checkMerge2('meete', 'meta'));    // false
0 голосов
/ 02 апреля 2020

Вы можете фильтровать символы, используя смещение для другой строки.

const
    checkMerge = (string1, string2) => [...string1]
         .filter((i => (c, j) => c !== string2[i + j] && --i)(0))

console.log(checkMerge('peete', 'pete'));      // e
console.log(checkMerge('peetee', 'peete'));    // e
console.log(checkMerge('peeteerr', 'peeter')); // er
console.log(checkMerge('meet', 'met'));        // e
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...