持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情
每日力扣是一个专门用来讲力扣中国每天发布的每日一题的栏目。本专栏不提供题目的解答源码,只讲解思路,目的是养成每日刷题、提高自己手感,从而达到算法熟练的目标。
题目(已做删减处理)
给你长度相等的两个字符串
s1和s2。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回true;否则,返回false。
分析
今天力扣提供的是一道十分简单的模拟题。如果你读懂了题目的话,基本上能在5分钟内AC这道题目。因为过于简单,我们今天也就不去探索其他的内容。专心讲解题目的逻辑。 按照题目的说明,我们其实有这几种情况:
- 如果 s1 和 s2 完全相同,则返回
true; - 如果 s1 和 s2 不相同,但是不同位置的字符相同,则返回
true; - 如果 s1 和 s2 不相同,而且不同的位置超过了2个,那么返回
false; - 如果 s1 和 s2 不相同,而且不相同的位置只有1个,那么返回
false; 因为其实我们最终要得到的就是判断不同位置的字符是否相同,而且最大不超过2个。那么我们可以定义2个变量tmp1 和 tmp2 ,用来标记对应的地址(一般直接初始值设置为Integer.MIN_VALUES即可)。然后开始遍历字符串。 注意,题目中已经说明 s1.length()==s2.length(),并且s1.length()>=1,我们就不用考虑边界情况了。如果是面试中,我们需要再三确定。
总结
这是一道特别简单的模拟题目。尤其是对于题目中的情况来说,很容易判断出不同情况下的处理逻辑,加上题目中需要判断的情况很清楚、条件也不是很多,因此真的可以算是easy难度的题目。对于这种算法题目来说,我的建议是算法新手可以把 5 min 这个时间点作为一个标准:如果在easy题目上,你能够在5min中想出思路,并且能够AC,那就说明你的算法已经入门,可以往下一个阶段继续学习。