int canFormPalindrome(int n, int m, char * s1, char *s2) {
int freq1[26],freq2[26];
for(int i=0;i<26;i++){
freq1[i]=0;
freq2[i]=0;
}
char c;
for (int i=0;i<strlen(s1);i++) {
c=s1[i];
freq1[c - 'a']++;
}
for (int i=0;i<strlen(s2);i++) {
c=s2[i];
freq2[c - 'a']++;
}
int haveCommon = 0;
for (int i = 0; i < 26; ++i) {
if (freq1[i] > 0 && freq2[i] > 0) {
haveCommon = 1;
break;
}
}
if (haveCommon==0) {
return 0;
}
int totalFreq[26];
for (int i = 0; i < 26; ++i) {
totalFreq[i] = freq1[i] + freq2[i];
}
int oddCount = 0;
int count;
for (int i=0;i<26;i++) {
count=totalFreq[i];
if (count % 2 == 1) {
oddCount++;
}
}
if ((n + m) % 2 == 0) {
if(oddCount == 0) return 1;
else return 0;
}
else {
if(oddCount == 1) return 1;
else return 0;
}
}
int main()
{
int C;
printf("请输入数据组数:");
scanf("%d",&C);
for (int i = 0; i < C; ++i) {
int n, m;
char* s1, s2;
printf("请输入第%d组2个字符串的长度和两个字符串:",i);
scanf("%d %d %s %s",&n,&m,&s1,&s2);
if(canFormPalindrome(n, m, s1, s2)==1) printf("YES\r\n")
else printf("NO\r\n");
}
printf("程序执行完成,请按a键结束.....");
char reciveChar;
while (1) {
reciveChar = getchar();
if (reciveChar == 'a') break;
}
return 0;
}