每日一题——LeetCode859

方法一 个人方法:

  1. 首先s和goal要是长度不一样或者就只有一个字符这两种情况可以直接排除
  2. 剩下的情况s和goal的长度都是一样的,s的长度为2也是特殊情况,只有s的第一位等于goal的第二位,s的第二位等于goal的第一位才能满足
  3. 剩下的我们需要统计s的goal的哪几位字符是不一样的,并用数组保存不同的位置
  4. 如果不同的位数等于1那么无论怎么交换都不能满足,不同的位数大于2那么只交换一次也不能满足
  5. 如果没有不同的字符,说明s和goal是一样的字符串,这种情况只需要s或者goal有任意一个字符出现了两次及以上,把相同的字符互相调换,它还是原来的字符串
var buddyStrings = function(s, goal) {if(s.length!=goal.length || s.length<=1){return false}if(s.length==2){if(s[0]===goal[1] && s[1]===goal[0]) return trueelse return false }var diff=[]for(var i=0;i<s.length;i++){if(s[i]!=goal[i]){diff.push(i)}}if(diff.length===2){if(s[diff[0]]===goal[diff[1]] && s[diff[1]]==goal[diff[0]]) return trueelse return false}else if(diff.length===1 || diff.length>2) return falseelse{var set = new Set(s)return s.length===set.size?false:true}
};

消耗时间和内存情况:

方法二 官方解法:

思路差不太多,我把情况分的太细了啰嗦了一点,官方解法思路更加直接精确

设i和j为需要交换的字符的位置,如果满足交换 s[i] 和 s[j]后两个字符串相等,那么需要满足以下几个条件使得 s 和 goal为亲密字符串:

  • 字符串 sss 的长度与字符串 goal\textit{goal}goal 的长度相等;
  • 存在 i≠j 且满足 s[i]=goal[j]以及 s[j]=goal[i],实际在 s[i],s[j],goal[i],goal[j]这四个自由变量中,只存在两种情况:

  1. 满足 s[i]=s[j]:则此时必然满足 s[i]=s[j]=goal[i]=goal[j],字符串 s 与 goal相等,我们应当能够在 s中找到两个不同的索引 i,j,且满足 s[i]=s[j],如果能够找到两个索引不同但值相等的字符则满足 s与 goal 为亲密字符串;否则不为亲密字符串。

  2. 满足 s[i]≠s[j]:满足 s[i]=goal[j],s[j]=goal[i],s[i]≠s[j]的情况下,两个字符串 s 与 goal除了索引 i,j 以外的字符都是匹配的。

var buddyStrings = function(s, goal) {if (s.length != goal.length) {return false;}if (s === goal) {const count = new Array(26).fill(0);for (let i = 0; i < s.length; i++) {count[s[i].charCodeAt() - 'a'.charCodeAt()]++;if (count[s[i].charCodeAt() - 'a'.charCodeAt()] > 1) {return true;}}return false;} else {let first = -1, second = -1;for (let i = 0; i < s.length; i++) {if (s[i] !== goal[i]) {if (first === -1)first = i;else if (second === -1)second = i;elsereturn false;}}return (second !== -1 && s[first] === goal[second] && s[second] === goal[first]);}
};作者:力扣官方题解
来源:力扣(LeetCode)

消耗时间和内存情况: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/296755.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全网功能最全、界面最美的年会抽奖源码合集

文章目录 1️⃣ 年会抽奖平台源码1.1 html5实现最震撼公司年会抽奖1.2 html实现好看的年会抽奖1.3 年会活动html酷炫抽奖功能1.4 星空版的九宫格酷炫抽奖HTML源码1.5 html实现名字滚动年会抽奖(附源码)1.6 html实现酷炫的公司年会抽奖(附源码)1.7 html5实现最高端的公司年会抽奖…

AntDesignBlazor示例——Modal表单

本示例是AntDesign Blazor的入门示例&#xff0c;在学习的同时分享出来&#xff0c;以供新手参考。 示例代码仓库&#xff1a;https://gitee.com/known/BlazorDemo 1. 学习目标 创建Modal表单编辑数据创建Table操作列 2. 创建Modal表单 1&#xff09;新增按钮和Modal组件 …

掌握iText:轻松实现固定pdf模板的动态数据填充

推荐语 如果你在工作中需要处理大量的PDF表单&#xff0c;那么使用iText5实现固定PDF模板的动态数据填充&#xff0c;将是一种非常有效的方法。这篇技术文章详细介绍了如何使用iText5库来读取已有的PDF模板&#xff0c;并动态地填充表单数据&#xff0c;生成最终的表单文件。通…

【数据结构入门精讲 | 第十七篇】一文讲清图及各类图算法

在上一篇中我们进行了的并查集相关练习&#xff0c;在这一篇中我们将学习图的知识点。 目录 概念深度优先DFS伪代码 广度优先BFS伪代码 最短路径算法&#xff08;Dijkstra&#xff09;伪代码 Floyd算法拓扑排序逆拓扑排序 概念 下面介绍几种在对图操作时常用的算法。 深度优先D…

记一次 Nginx 调参的踩坑经历

最近在基于SSE&#xff08;Server Sent Events&#xff09;做服务端单向推送服务&#xff0c;本地开发时一切顺利&#xff0c;但是在部署到预发环境时就碰到1个很诡异的问题&#xff0c;这里需要简单介绍下我们的整体架构&#xff1a; 整体架构 可以看到所有的请求都会先到统一…

STM32移植LVGL图形库

1、问题1&#xff1a;中文字符keil编译错误 解决方法&#xff1a;在KEIL中Options for Target Flash -> C/C -> Misc Controls添加“--localeenglish”。 问题2&#xff1a;LVGL中显示中文字符 使用 LVGL 官方的在线字体转换工具&#xff1a; Online font converter -…

阿里云Code的代码仓库忘了升级导致现在找不到了怎么办?

阿里云Code的代码仓库忘了升级了&#xff0c;找不到了怎么办&#xff1f;如何找回丢失的阿里云代码? 1.1 问题背景1.2 修复方案 1.1 问题背景 众所周知&#xff0c;在之前&#xff0c;阿里云代码仓库托管使用的是 code.aliyun.com,后来迁移到了 codeup.aliyun.com &#xff0…

解锁JDK 12的奇妙之旅:新特性详解

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 解锁JDK 12的奇妙之旅&#xff1a;新特性详解 前言switch表达式拓展NumberFormat对复杂数字的格式化字符串支持transform、indent操作新增方法Files.mismatch(Path, Path)Teeing Collector支持unicode…

map容器的基本使用

文章目录 mapmap模板参数默认构造迭代器[ ]{ }inserterasefindlower_bound && upper_boundcountequal_range map和set容器&#xff0c;multimap和multiset是树形结构的关联式容器&#xff0c;这四种容器底层原理都是红黑树&#xff0c;容器中的元素是一个有序序列。 ma…

Windows系统安装 ffmpeg

下载及解压 ffmpeg官方下载地址&#xff1a;https://ffmpeg.org/download.html 下载好后将其解压至你想保存的位置中。 环境变量设置 打开Windows设置&#xff0c;在搜索框输入&#xff1a;系统高级设置。 新建环境变量&#xff0c;并输入bin目录具体位置。 安装检查 按住 w…

Ubuntu 系统的基础操作和使用

文章目录 前言常用命令1. 基本操作lscdpwd 2. 对文件的操作touchcatechovim 3. 对目录的操作mkdirrm 4. 移动文件 / 目录的操作cpmv 5. 总结基本操作6. 必不可少的实用操作mangreppsnetstat 总结 前言 本文内容为一些超常用命令, 内容不多且十分实用, 这些命令是每一个开发人员…

Head First Design Patterns - 策略模式

策略模式 策略模式&#xff1a;策略模式是一种行为型模式&#xff0c;它将对象和行为分开&#xff0c;将行为定义为 一个行为接口 和 具体行为的实现。策略模式最大的特点是行为的变化&#xff0c;行为之间可以相互替换。每个if判断都可以理解为就是一个策略。本模式使得算法可…