南阳915——+-字符串
题目:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=915
思路:两个字符串1,2,从前往后,找到1与2不同的第一个字符,要通过相邻字符串交换,使得这个位置上的字符串相同,单单站在这个问题上,最好的方法是:从1字符串的这个位置往后找与2字符串这个位置字符相同的字符,然后不断的往前交换。但是整体上也不知道这种方法是不是最少步骤的,不妨试一试,这也是贪心的思想(局部最好,到整体)。下面代码把不断交换的过程省略了,因为交换的次数只与两个位置i,j有关c=j-i,而不断交换后的结果 与 两个位置上的字符交换 一样,所以直接优化成后一种。
代码:
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char s1[5005],s2[5005],ch; 6 int i,j,count=0,flag; 7 while(~scanf("%s",&s1)) 8 { 9 scanf("%s",&s2); 10 count=0; 11 flag=1; 12 for(i=0; s1[i]!='\0'; i++) 13 { 14 if(s1[i]!=s2[i]) 15 { 16 flag=0; 17 for(j=i+1; s1[j]!='\0'; j++) 18 { 19 if(s1[j]==s2[i]){ 20 flag=1;//说明找着了 21 ch=s1[i]; 22 s1[i]=s1[j]; 23 s1[j]=ch;//i,j位置上的字符串交换 24 count=count+j-i; 25 break; 26 } 27 } 28 if(!flag){//没有找到 29 printf("-1\n"); 30 break; 31 } 32 } 33 } 34 if(flag) 35 printf("%d\n",count); 36 } 37 return 0; 38 }