解题报告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 由小写英文字母组成
分三种情况讨论:
- 两个字符串长度不等,则不是亲密字符串
- 如果两个字符串完全相等,那么,只有这两个字符串中有重复字符时,才能认为它们是亲密字符串。 如abca和abca中,a和a可以互换。
- 如果两个字符串不相等,那么,它们只能有两个位置不同,而我们交换这两个不同的位置就可以得到另一个。 如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每日一题系列