南阳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 }

 

posted on 2018-08-26 18:36  李瑶瑶lyy  阅读(123)  评论(0编辑  收藏  举报

导航