2020-02-05
1.题目描述
返回能否通过交换 A 中的两个字母得到与 B 相等的结果
2.题解
通过交换的字母可以是相同和不同两种情况得到以下的分析结果;
分为两种情况,两个字符串相等或者不相等。如果相等的话,那么看字符串中是否出现次数为两个
或两个以上的字母,如果有就返回true,否则返回false;如果不相等的话,看进行一次交换能不能
使字符串相等。
3.代码
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Solution {
public:
bool buddyStrings(string A, string B) {
if (A.length()!=B.length()) return false;
int i,j,l=A.length();
for (i=0;i<l;i++){
if (A[i]!=B[i]) break;
}
if (i>=l){
int x[26];
memset(x,0,sizeof(x));
for (int t=0;t<l;t++){
x[A[t]-'a']++;
}
for (int t=0;t<26;t++){
if (x[t]>=2) return true;
}
return false;
}
for (j=i+1;j<l;j++){
if (A[j]!=B[j]) break;
}
if (j>=l) return false;
char t=A[i];
A[i]=A[j];
A[j]=t;
for (i=0;i<l;i++){
if (A[i]!=B[i]) return false;
}
return true;
}
};
int main(){
Solution s;
cout<<s.buddyStrings("aaaaaaabc","aaaaaaacb")<<endl;
return 0;
}