|

楼主 |
发表于 2019-6-27 10:20:52
|
显示全部楼层
- 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%的用户
- */
复制代码 |
|