第二次周赛,依旧是前两题游,但是错误提交明显少了很多,估计是这次比较简单吧,第三题感觉是DP算法,但是怎么都找不到规律,本月月总结就写动态规划好了
5701. 仅执行一次字符串交换能否使两个字符串相等
反正是通过遍历和Map来构建哈希表,之后再次比对完成结果
var areAlmostEqual = function(s1, s2) {
// 两个字符串只能交换一次,交换之后相等
// 两个字符串长度相等,位置不同的确定点是在s1中出现但是s2中位置不同
// 保存s1中元素和元素所在位
let map = new Map()
// 遍历s1中所有元素
for(let i = 0;i<s1.length;i++) {
if(map.has(s1[i])) {
// 如果有这个元素
let arr = map.get(s1[i])
arr.push(i)
map.set(s1[i],arr)
} else {
// 如果不存在这个元素
map.set(s1[i],[i])
}
}
// 循环结束后map中保存的是元素和元素出现的位置,并且位置数组的长度就是元素出现的次数
// 之后遍历s2进行对比
for(let i = 0;i<s2.length;i++) {
if(map.has(s2[i])) {
// 如果当前元素出现在map中
let arr = [...map.get(s2[i])]
console.log(arr);
// 从位置数组中剔除当前元素
let index= arr.indexOf(i)
if(index !== -1) {
arr.splice(index,1)
if(arr.length === 0) {
// 这个元素全部计算过了
map.delete(s2[i])
} else {
// 这个元素还在其他地方出现了
map.set(s2[i],arr)
}
}
} else {
return false
}
}
// 最后计数
let count = 0
map.forEach((x,i) => {
count += x.length
})
return count === 2 && map.size === 2 || map.size === 0 ? true : false
};
5702. 找出星型图的中心节点
这道题好像过分简单了,既然都是图了,并且完全符合要求,每个数组中间只要有1个元素相同就可以了,甚至觉得既然符合星型图的话,只要对比前2个数组,找到相同的数就是结果了
var findCenter = function(edges) {
// 判断是不是每一条边中间有一个元素都相同
let length = edges.length
let res
for(let i = 0;i<length-1;i++) {
// 对比所有数组中相同的那个数就是结果
let [x1,y1] = edges[i]
if(edges[i+1].indexOf(x1) !== -1) {
res = x1
} else {
res = y1
}
}
return res
};