удалить символ из 2 строк, чтобы сделать их анаграммами в typescript

#javascript #typescript #anagram

Вопрос:

Я попытался решить одну из задач Hackerrank String: создание анаграмм

У меня есть 2 строки, подобные этой:

 let a: string = "fcrxzwscanmligyxyvym"
let b: string = "jxwtrhvujlmrpdoqbisbwhmgpmeoke"
 

и у меня есть функция, которая прошла только 3 теста!!! :

 function makeAnagram(a: string, b: string): number {
    type Map = {
        [key :string] : number
    }
   let string1 = a.split('')
   let string2 = b.split('')
   let map : Map = {}
   let deletedCount = 0
   let firstCount = 0
   let isMoreThanTwo = false
   
   for(let i of string1) {
       map[i] = (map[i] | 0)   1
   }
   
   for(let i of string2){
       map[i] = (map[i] | 0)   1
   }
   
   for(let i in map) {
       if(map[i] == 1) {
           deletedCount  
           firstCount  
       } else if(map[i] > 2) {
           isMoreThanTwo = true
           deletedCount  = (map[i] - 1)
       }
       
   }
   
   return isMoreThanTwo ? deletedCount   firstCount : deletedCount
 

есть ли какое-либо другое решение для подсчета удаленных символов? и можете ли вы, ребята, дать мне несколько советов, спасибо

Комментарии:

1. Разве это не вопрос leetcode? ха-ха, современные проблемы требуют современных решений.

Ответ №1:

Я только что решил эту проблему, но перед тем, как пройти все тестовые примеры, я пришел к решению, в котором я использовал

 for (let [k, v] of map) {
  remain  = v;
}
 

которые не 13/16 прошли тестовые примеры, затем я отладил программу и узнал, что иногда, когда мы вычитаем 1 из предыдущего этого шага, получается less than 0 , что вам также нужно обработать этот случай, я обрабатываю как

 for (let [k, v] of map) {
  remain  = v < 0 ? v * -1 : v;
}
 

Теперь все тестовые примеры пройдены

 function makeAnagram(a, b) {
  const [small, big] = a.length < b.length ? [a, b] : [b, a];
  const map = new Map();
  for (let c of small) {
    map.set(c, (map.get(c) ?? 0)   1);
  }

  let remain = 0;
  for (let c of big) {
    !map.has(c) ? remain   : map.set(c, map.get(c) - 1);
  }

  for (let [k, v] of map) {
    remain  = v < 0 ? v * -1 : v;
  }

  return remain;
}

console.log(makeAnagram("fast", "sofasty"));