859. 亲密字符串

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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值