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

 

转载于:https://www.cnblogs.com/li-yaoyao/p/9538190.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值