Leetcode859.Buddy Strings亲密字符串
给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。
示例 1:
输入: A = "ab", B = "ba" 输出: true
示例 2:
输入: A = "ab", B = "ab" 输出: false
示例 3:
输入: A = "aa", B = "aa" 输出: true
示例 4:
输入: A = "aaaaaaabc", B = "aaaaaaacb" 输出: true
示例 5:
输入: A = "", B = "aa" 输出: false
提示:
- 0 <= A.length <= 20000
- 0 <= B.length <= 20000
- A 和 B 仅由小写字母构成。
暴力法超时:
class Solution {
public:
bool buddyStrings(string A, string B) {
int len1 = A.size();
int len2 = B.size();
if(len1 <= 1 || len2 <= 1 || len1 != len2)
return false;
for(int i = 0; i < len1; i++)
{
for(int j = i + 1; j < len1; j++)
{
swap(A[i], A[j]);
if(A == B)
return true;
else
swap(A[i], A[j]);
}
}
return false;
}
};
官方题解:
方法:情况列举
思路
如果 A[i] == B[i],我们就说 i 是匹配的,否则称 i 是不匹配的。亲密字符串几乎是完全匹配的,因为一次交换只会影响到两个索引。
如果交换 A[i] 和 A[j] 可以证明 A 和 B 是亲密字符串,那么就有 A[i] == B[j] 以及 A[j] == B[i]。 这意味着在 A[i], A[j], B[i], B[j] 这四个自由变量中,只存在两种情况:A[i] == A[j] 或 A[i] != A[j]
算法
让我们来看看这些情况。
在 A[i] == A[j] == B[i] == B[j] 的情况下,字符串 A 与 B 相等。因此,如果 A == B,我们应当检查每个索引 i 以寻找具有相同值的两个匹配。
在 A[i] == B[j], A[j] == B[i], (A[i] != A[j]) 的情况下,其余索引是相匹配的。所以如果 A 和 B 只有两个不匹配的索引(记作 i 和 j),我们应该检查并确保等式 A[i] == B[j] 和 A[j] == B[i] 成立。
class Solution {
public:
bool buddyStrings(string A, string B) {
int len1 = A.size();
int len2 = B.size();
if(len1 != len2 || len1 <= 1 || len2 <= 1)
return false;
if(A == B)
{
map<char, int> check;
for(int i = 0; i < len1; i++)
check[A[i]]++;
for(map<char, int> :: iterator itr = check.begin(); itr != check.end(); itr++)
{
if(itr ->second >= 2)
return true;
}
return false;
}
else
{
int first = -1;
int second = -1;
for(int i = 0; i < len1; i++)
{
if(A[i] != B[i])
{
if(first == -1)
{
first = i;
}
else if(second == -1)
{
second = i;
}
else
return false;
}
}
if(first != -1 && second != -1 && A[first] == B[second] && A[second] == B[first])
return true;
else
return false;
}
}
};
Leetcode859.Buddy Strings亲密字符串的更多相关文章
- [LeetCode] Buddy Strings 伙计字符串
Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...
- LeetCode 859. 亲密字符串(Buddy Strings) 23
859. 亲密字符串 859. Buddy Strings 题目描述 给定两个由小写字母构成的字符串 A 和 B,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true:否则返 ...
- C#LeetCode刷题之#859-亲密字符串(Buddy Strings)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3973 访问. 给定两个由小写字母构成的字符串 A 和 B ,只要 ...
- 859. Buddy Strings - LeetCode
Question 859. Buddy Strings Solution 题目大意: 两个字符串,其中一个字符串任意两个字符互换后与另一个字符串相等,只能互换一次 思路: diff 记录不同字符数 两 ...
- 力扣(LeetCode)亲密字符串 个人题解
给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true :否则返回 false . 示例 1: 输入: A = "ab& ...
- 亲密字符串之Javascript解法
本题为leetcode第859题,原题链接在此:https://leetcode-cn.com/problems/buddy-strings/submissions/ 给定两个由小写字母构成的字符串 ...
- 【Leetcode_easy】859. Buddy Strings
problem 859. Buddy Strings solution: class Solution { public: bool buddyStrings(string A, string B) ...
- [Swift]LeetCode859. 亲密字符串 | Buddy Strings
Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...
- LeetCode.859-伙伴字符串(Buddy Strings)
这是悦乐书的第330次更新,第354篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第200题(顺位题号是859).给定两个字母A和B的小写字母,当且仅当我们可以在A中交换 ...
随机推荐
- HBase实际应用中的性能优化方法
- Leetcode944. Delete Columns to Make Sorted删列造序
给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等. 选取一个删除索引序列,对于 A 中的每个字符串,删除对应每个索引处的字符. 所余下的字符串行从上往下读形成列. 比如,有 A = ...
- C语言源代码——计算任何一天是星期几
代码写的不严谨. 网上也有很多计算任何一天是星期几的C语言源代码,不过,有些代码含有一点点小错误.像闰年的分辨啊,或者是每个月的天数,再或者星期的计算公式,都是比较细微的环节,出一点错误都有可能导致结 ...
- vue题目
1.active-class是哪个组件的属性?嵌套路由怎么定义?答:vue-router模块的router-link组件. 2.怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 答: ...
- 关于bind
1, 目的 使程序可以感知到事件 2, 格式 widget.bind(event, handler) 3, handler注意事项 在这里, handler作为一个函数, 是需要一个event对象作为 ...
- [CQOI2011]放棋子--DP
题目描述: 输入格式 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数保证不超过nm.N,M<=30 C<=10 ...
- bootstrap面包屑在ie8下显示重叠,鼠标点击显示效果正常
ie8下加载后的显示 点击之后的显示 主要是li标签宽度auto引起的,可以设置li标签的最小宽度 <ol class="breadcrumb"> <li id= ...
- mysql把表的指定字段值赋给本表另一个字段
原本是主键一对一关联的,后来发现这样操作很不方便,改成主外键一对一 所以添加一个外键字段bodyId(文章正文单独存一个表) UPDATE t_article SET bodyId=id; 但是等了半 ...
- 008-python绘制五个五角星
操纵海龟绘图有着许多的命令,这些命令可以划分为两种:一种为运动命令,一种为画笔控制命令 1. 运动命令: forward(degree) #向前移动距离degree代表距离 backward(deg ...
- [Array] 566. Reshape the Matrix
In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...