每日一题——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.mzph.cn/news/305778.shtml

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

相关文章

4倍速!ML.NET Model Builder GPU 与 CPU 对比测试

当我们使用 Visual Studio 进行机器学习开发时&#xff0c;一般都会推荐安装 ML.NET Model Builder &#xff0c;这让我们的开发更加可视化&#xff0c;并且按照步骤载入相关的训练集&#xff0c;选择好模型就够了&#xff0c;一切就是如此朴实无华。说到 ML.NET Model Builder…

疯狂的爬网

今天下午13:00~16:00&#xff0c;来自61.152.236.158的访客对博客园进行了疯狂的爬网。访问次数 &#xff1a;45506 频率&#xff1a;13次/秒访问目标地址&#xff1a;主要是个人Blog各个分类的RSS。看来需要对各个分类的RSS进行进一步的性能优化。

php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...

浅谈PHP链表数据结构(单链表)链表&#xff1a;是一个有序的列表&#xff0c;但是它在内存中是分散存储的&#xff0c;使用链表可以解决类似约瑟夫问题&#xff0c;排序问题&#xff0c;搜索问题&#xff0c;广义表单向链表&#xff0c;双向链表&#xff0c;环形链表PHP的底层是…

Xamarin.Forms 5.0 来了

Xamarin.Forms 5.0 已经正式发布&#xff0c;并带来其新功能&#xff0c;具体看官方博客https://devblogs.microsoft.com/xamarin/xamarin-forms-5-0-is-here/。在很大程度上&#xff0c;它是关于稳定版本功能的正式发布的&#xff0c;这些功能已在实验版本中获得使用&#xff…

中国的怪现象

在中国&#xff0c;因为各种各样的原因&#xff0c;会冒出一些怪现象。以前我经常与人谈的一个就是“盈利机构在亏损&#xff0c;非盈利机构在赚钱”。我不知道这个算不算是共识&#xff0c;但是&#xff0c;我的确看到一些这样的情况。因为我们经常看到某些应该盈利的国有企业…

PHP秒杀截流原理,节流阀和去抖动的基本实现方法介绍

本篇文章给大家带来的内容是关于节流阀和去抖动的基本实现方法介绍&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。节流阀throttle触发的事件以周期的形式去执行&#xff0c;而非实时。如滴水的水龙头。function throttle (f…

ML.NET 推荐引擎中一类矩阵因子分解的缺陷

ML.NET 作为 .NET 跨平台的机器学习套件&#xff0c;在回归、预测、分类甚至是图像识别、异常检测都展现出简洁快速的优势&#xff0c;以往的文章已介绍过不再赘述。其实机器学习场景中还有一类非常常见的&#xff0c;就是推荐&#xff0c;特别是在线购物、文娱产品为了提升用户…

建立用户、密码类型

每次做用户密码等类型的验证都很麻烦&#xff0c;最近想了个办法来简化判断的逻辑。.Net中提供了隐式转换&#xff0c;虽然降低了代码可读性&#xff0c;但是使用确实很方便。而且我认为&#xff0c;定义自己的类型使用它并不会降低可读性。可以定义用户类型UserName1 usingSys…

tars框架php,TarsPHP: TARS-PHP是针对php使用tars二进制协议,以及tars平台整体运维、RPC等一系列能力的解决方案...

TARS-PHPTARS-PHP是针对php使用tars二进制协议&#xff0c;以及tars平台整体运维、RPC等一系列能力的解决方案。它主要由如下的几个部分组成&#xff1a;如果你想要快速的体验tars-server,请进入examples目录,里面有详尽的三种服务的部署guideline和开发guidelinetars-clientta…

晋升新一线的合肥,跨平台的.NET氛围究竟如何?

大伙可能不知道&#xff0c;2020年合肥已经成功晋升为新一线城市了。本文通过对目前合肥.NET招聘信息以及公众号的相关数据的分析来看下目前合肥.NET的大环境。就着2020中国.NET开发者峰会顺利举行的东风&#xff0c;同时为进一步提升合肥地区的.NET技术氛围&#xff0c;一些合…

软件工程心理学之1----开篇

最近偶然翻了下以前做过的项目或者做过的咨询或者监理的一些记录&#xff0c;文档之类的&#xff0c;又听了和看了一些讲座和相关的资料&#xff0c;觉得应该要重视软件工程中的心理学应用。因为之前自己在大学学过心理学&#xff0c;当时以为没什么用&#xff0c;但现在回顾一…

开源项目barcodelib-C#条形码图像生成库

介绍该库旨在为开发人员提供一个简单的类&#xff0c;以便他们在需要根据数据字符串生成条形码图像时使用。用法该库包含一个名为BarcodeLib的类&#xff0c;其中包含三个构造函数&#xff1a;Barcode(); Barcode(string); Barcode(string, BarcodeLib.TYPE);如果决定使用参数创…

成功测试管理者的九大原则

简介 许多测试管理者是从技术部门进到管理阶层的。尽管他们有可能受过很多测试或软件工程的培训和指导&#xff0c;但他们还是很难经常从失败和错误中学到管理技巧。作为一个管理者&#xff0c;你有两项基本工作&#xff1a;找出为你工作的最好 的员工并且建立一个能够使员工完…

categories php,manage-categories.php

include common.php;include header.php;include menu.php;Typecho_Widget::widget(Widget_Metas_Category_Admin)->to($categories);?><?php include page-title.php; ?><?php _e(删除); ?><?php _e(刷新); ?><?php $categories->parse…

ctf php 读取flag,BugkuCTF flag.php(反序列化)

进去后是个登录页面&#xff0c;但是login根本不会跳转&#xff0c;看源码也没提示&#xff0c;但是这道题给了一个提示&#xff1a;hint&#xff0c;那么盲猜应该是一个get参数&#xff0c;因为post不能跳转&#xff0c;那么get总有内容吧&#xff0c;跟上hint参数&#xff0c…

2021技术人新展望

一、前言各位小伙伴们还有几天新的一年即将来临&#xff0c;这篇文章作为今年的结束吧。不知道大家对自己每一年的技术发展规划是什么&#xff0c;我在这里分享一下我2021年的新的规划&#xff0c;这里非常感谢各位小伙伴对我的关注。二、内容概要2021的布局客户端技术分享服务…

在 ASP.NET 中实现会话状态的基础

简介 在 Web 应用程序这样的无状态环境中&#xff0c;了解会话状态的概念并没有实际的意义。尽管如此&#xff0c;有效的状态管理对于大多数 Web 应用程序来说都是一个必备的功能。Microsoft ASP.NET 以及许多其他服务器端编程环境都提供了一个抽象层&#xff0c;允许应用程序基…

【One by One系列】IdentityServer4(三)使用用户名和密码

继续介绍IdentityServer4,我们上篇介绍了IdentityServer4实现OAuth2.0的授权方式之一的客户端凭证&#xff0c;接下来我们继续介绍OAuth2.0的另外一种授权方式密码式&#xff0c;Resource Owner Password Credentials。post请求token?grant_typepassword&usernameUSERNAME…

oracle数据缓冲区作用,Oracle内存结构(02)--缓冲区

用户提交一个新SQL语句时&#xff0c;Oracle会分析(parse)该句SQL(硬解析)&#xff0c;这个过程将耗费相对较多的时间。分析完毕后&#xff0c;oracle会将该SQL的分析结果给保存在Library Cache中&#xff0c;当数据库再次执行该SQL时&#xff0c;oracle将直接取第一次分析结果…

使用设计模式构建通用数据库访问类

在应用程序的设计中&#xff0c;数据库的访问是非常重要的&#xff0c;我们通常需要将对数据库的访问集中起来&#xff0c;以保证良好的封装性和可维护性。在.Net中&#xff0c;数据库的访问&#xff0c;对于微软自家的SqlServer和其他数据库&#xff08;支持OleDb&#xff09;…