【LeetCode】859. 亲密字符串

903 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题给出字符串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

image.png

根据上述思路分析,我们使用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记录如下:

image.png

时间复杂度O(N),空间复杂度O(N)

以上是本期内容,欢迎大佬们点赞评论,下期见~~