void swap(char* a, char* b)
{
char c = *a;
*a = *b;
*b = c;
}
bool compareTwoStr(char* A , char* B , int size)
{
int i = 0;
bool ret_val = true;
for(i = 0; i < size;i++)
{
if(A[i]!=B[i])
{
ret_val = false;
break;
}
}
return ret_val;
}
/*方法1:逐一比较交换情况*/
bool buddyStrings(char* A,char*B)
{
bool ret_val = false;
int len_A = strlen(A);
int len_B = strlen(B);
int i = 0;
int j = 0;
int no_match_count = 0;
int no_match_idx[2] = {0,};
do
{
if( ( len_A != len_B )
||( len_A < 2 )
||( len_B < 2 )
)
{
ret_val = false;
break;
}
for(i = 0; i < len_A;i++)
{
if(A[i]!=B[i])
{
if(no_match_count<2)
{
no_match_idx[no_match_count] = i;
no_match_count++;
}
else
{
no_match_count++;
break;
}
}
}
if(no_match_count==2)
{
swap(&A[no_match_idx[0]],&A[no_match_idx[1]]);
ret_val = compareTwoStr(A,B,len_A);
break;
}
else if ((no_match_count==1)||(no_match_count==3))
{
ret_val = false;
break;
}
else /* no_match_count == 0 */
{ /* 逐一遍历交换情况,看是否有满足的情况*/
for(i = 0; i < len_A;i++)
{
for(j = len_B-1; j > i ; j--)
{
swap(&A[i],&A[j]);
ret_val = compareTwoStr(A,B,len_A);
if(ret_val)
{
break;
}
swap(&A[i],&A[j]);
}
if(ret_val)
{
break;
}
}
}
}while(0);
return ret_val;
}
/*
方法1:
执行用时 :12 ms, 在所有 C 提交中击败了23.33%的用户
内存消耗 :7 MB, 在所有 C 提交中击败了39.39%的用户
*/
|