小天使改名

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 335    Accepted Submission(s): 118


Problem Description
小天使的b站帐号被大家发现啦。于是小天使决定改名,将他原有ID中的两个不同位置的字母进行交换。(小天使有可能将两个不同位置的相同字母进行交换,虽然这样做他的ID并没有发生变化)
Lsf知道小天使原来的ID,他想知道某个ID是否可能是小天使的新ID。
 

Input
第一行为数据组数T(T≤100)。
每组数据的第一行是字符串 s1,(2length(s1)1000),为小天使的原始ID。
第二行是字符串 s2,(length(s2)=length(s1)),为Lsf猜测的ID。
s1,s2均只含小写字母。
 

Output
对每组数据输出一行,如果这个ID可能是小天使的新ID,输出YES,否则输出NO。
 

Sample Input
3 ch hc aa aa abc abb
 

Sample Output
YES YES NO

#include<cstdio>  
#include<iostream>  
#include<cmath>  
#include<cstring>
using namespace std;  

int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		char s1[1000+5];
		char s2[1000+5];
		int a[27]={0};
		int b[27]={0};
		cin>>s1>>s2;
		int num =0;
		int dif[10004];
		for(int i=0;i<strlen(s1);i++){
			a[s1[i]-'a']++;
			b[s2[i]-'a']++;
			if(s1[i]!=s2[i])num++;
		}
		bool flagg= false;
		bool flag = true;
		for(int i=0;i<26;i++){
			if(a[i]>=2)flagg=1;
			if(a[i]!=b[i]){
				flag=0;
				break;
			}
		}
		if((flag&&num==2)||(flag&&flagg&num==0))printf("YES\n");
		else printf("NO\n");
	}	
}