解题报告Leecode 859. 亲密字符串——Leecode每日一题系列

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解题报告Leecode 859. 亲密字符串——Leecode每日一题系列相关的知识,希望对你有一定的参考价值。

今天是坚持每日一题打卡的第二十四天


题目链接:https://leetcode-cn.com/problems/buddy-strings/


题解汇总:https://zhanglong.blog.csdn.net/article/details/121071779


题目描述

给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。

交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。

例如,在 “abcd” 中交换下标 0 和下标 2 的元素可以生成 “cbad” 。

示例 1:
输入:s = “ab”, goal = “ba”
输出:true
解释:你可以交换 s[0] = ‘a’ 和 s[1] = ‘b’ 生成 “ba”,此时 s 和 goal 相等。

示例 2:
输入:s = “ab”, goal = “ab”
输出:false
解释:你只能交换 s[0] = ‘a’ 和 s[1] = ‘b’ 生成 “ba”,此时 s 和 goal 不相等。

示例 3:
输入:s = “aa”, goal = “aa”
输出:true
解释:你可以交换 s[0] = ‘a’ 和 s[1] = ‘a’ 生成 “aa”,此时 s 和 goal 相等。

示例 4:
输入:s = “aaaaaaabc”, goal = “aaaaaaacb”
输出:true

提示:
1 <= s.length, goal.length <= 2 * 104
s 和 goal 由小写英文字母组成


分三种情况讨论:

  1. 两个字符串长度不等,则不是亲密字符串
  2. 如果两个字符串完全相等,那么,只有这两个字符串中有重复字符时,才能认为它们是亲密字符串。 如abca和abca中,a和a可以互换。
  3. 如果两个字符串不相等,那么,它们只能有两个位置不同,而我们交换这两个不同的位置就可以得到另一个。 如aaaaabc和aaaaacb

class Solution 
public:
    bool buddyStrings(string s, string goal) 
        int vis[26 + 5] = 0;
        if (s == goal)                                 // 情况1
            for (auto i : s) 
                if (vis[i-'a'] != 0) return true;
                vis[i-'a']++;
            
            return false;
         else                                         // 情况2
            int len1 = s.size(), len2 = goal.size();
            if (len1 != len2) return false;             // 长度不相等
            int first = -1, second = -1;
            for (int i = 0; i < len1; i++) 
                if(s[i] != goal[i]) 
                    if(first == -1) 
                        first = i;
                     else if(second == -1) 
                        second = i;
                     else 
                        return false;
                    
                
            
            if (first == -1 || second == -1) return false;
            return ((s[first] == goal[second] && s[second] == goal[first]) ? true : false);
        
    
;

以上是关于解题报告Leecode 859. 亲密字符串——Leecode每日一题系列的主要内容,如果未能解决你的问题,请参考以下文章

解题报告Leecode 500. 键盘行——Leecode每日一题系列

解题报告Leecode 748. 最短补全词——Leecode每日一题系列

解题报告Leecode 748. 最短补全词——Leecode每日一题系列

解题报告Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列

解题报告Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列

解题报告Leecode 423. 从英文中重建数字——Leecode每日一题系列