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;
}
}
};
最新文章
- Matlab 循环读入和输出
- ubuntu下eclipse scala开发插件(Scala IDE for Eclipse)安装
- Spark Streaming容错的改进和零数据丢失
- 三、Spring——数据访问
- android studio clone 失败
- UVA5876 Writings on the Wall 扩展KMP
- linux,shell输入反斜杠显示&#39;W&#39;。
- Android 中类似ModelWindow的一个实现
- 在开发板Linux上挂载";驱动";挂载不成功,出现提示server 172.27.52.100 not responding, still trying
- BZOJ 3969 Low Power 解题报告
- redis 中文存储乱码问题
- Android实现通过手机找回密码
- thinkjs——一个字段一种数字代表两种状态
- Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons
- usb驱动程序小结(六)
- ibatis中的resultMap
- GNU Wget 1.19.1 static built on mingw32
- C语言面试笔记(8/26)
- PythonStudy——数据类型总结 Data type summary
- [k8s]k8s-ceph-statefulsets-storageclass-nfs 有状态应用布署实践
热门文章
- golang Linux下编译环境搭建
- windows API 第九篇 _tcslwr _strlwr _wcslwr _mbslwr
- select有条件in要按照in中的数据排序
- E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁 问题解决方法
- php函数基础(一)
- 用Jmeter参数化实现接口自动化测试
- Django--csrf跨站请求伪造、Auth认证模块
- Leetcode151. Reverse Words in a String翻转字符串里的单词
- Leetcode103. Binary Tree Zigzag Level Order Traversal二叉树的锯齿形层次遍历
- Linux字体美化实战(Fontconfig配置)(转)