#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"));