2021/03/14 周赛

第二次周赛,依旧是前两题游,但是错误提交明显少了很多,估计是这次比较简单吧,第三题感觉是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
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容