我試圖解決 Hackerrank 挑戰之一字串:制作字謎
我有 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
有沒有其他解決方案來計算已洗掉的字符?能不能給點建議,謝謝
uj5u.com熱心網友回復:
我剛剛解決了這個問題,但在通過所有測驗用例之前,我找到了一個我使用的解決方案
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"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/349980.html
標籤:javascript 打字稿 字谜
