一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出字符串s和字符串goal
- 要求交换s字符串任意两个位置的字符就可以得到goal字符串
- 要求在s字符串i 和 j是不相等的
二、思路分析:
我们拿到本题,咋看一看就有了如下思路:字符串s和字符串goal的长度不一样时,直接返回False
当字符串s和字符串goal一样时
刚开始,以为只要判断s字符串的字符都是重复就可以判断得出结果。代码提交,发现测试用例跑不过。
"abab"
"abab"
Output:False
result:Ture
则需要重新换条件。当字符串s和字符串goal相同时,len(set(s))<len(s)才可以判断成功
当字符串s和字符串goal不相同时
- 定义一个列表diff,来储存字符串s与字符串goal不相同时,存储坐标点。
- for循环遍历字符串s和字符串goal
- 当s[i] != goal[i] 时,则使用diff列表添加坐标点
- 当 diff长度等于2时,需要判断s[diff[0]] == goal[diff[1]] 并且 s[diff[1]] == goal[diff[0]]
- 当 diff长度不等于2时,则直接返回False
根据上述思路分析,我们使用python进行代码实现如下:
class Solution(object):
def buddyStrings(self, s, goal):
"""
:type s: str
:type goal: str
:rtype: bool
"""
if len(s) != len(goal): return False
if s == goal and len(set(s))< len(s):
return True
diff = []
for i in range(len(s)):
if s[i] != goal[i]:
diff.append(i)
if len(diff) == 2:
if s[diff[0]] == goal[diff[1]] and s[diff[1]] == goal[diff[0]] :
return True
else:
return False
else:
return False
三、总结:
本题需要考虑的场景比较多,提交五六次才通过,AC记录如下:
时间复杂度O(N),空间复杂度O(N)
以上是本期内容,欢迎大佬们点赞评论,下期见~~