您的位置:首页 > 其它

NYOJ915——+-字符串

2018-03-30 11:19 134 查看

+-字符串

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
 
描述Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。 
输入多组测试数据

每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。输出仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。样例输入
++-+--+
-++--++

样例输出
4


1 #include<stdio.h>
2 #include<string.h>
3 int main()
4 {
5     char a[5000],b[5000];
6     int i,j,n,c=0,d=0,e=0,f=0;
7     char t;
8     while(scanf("%s %s",a,b)!=EOF)
9     {
10         n=0;
11         getchar();
12         c=strlen(a);
13         d=strlen(b);
14         if(c!=d)//判断两个字符串长度是不是相等
15         {
16             printf("-1\n");
17             continue;
18         }
19         for(i=0;i<c;i++)
20         {
21             if(a[i]=='+')//得到a数组中+号个数
22             {
23                 e++;
24             }
25             if(b[i]=='+')//得到b数组
9ee7
中+号个数
26             {
27                 f++;
28             }
29         }
30         if(e!=f)//判断两个数组中+号个数是不是相等
31         {
32             printf("-1\n");
33             continue;
34         }
35         for(i=0;i<c-1;i++)
36         {
37             if(a[i]==b[i])//看对应位置上字符是否相等
38             {
39                 continue;
40             }
41             for(j=i;j<c-1;j++)//当对应位置上字符不等时,需要进行交换操作
42             {
43                 n++;
44                 if(b[i]==b[j+1])//b相邻位置上字符相等
45                 {
46                     continue;
47                 }
48                 else//b数组字符交换
49                 {
50                     t=b[i];
51                     b[i]=b[j+1];
52                     b[j+1]=t;
53                     break;
54                 }
55             }
56         }
57         printf("%d\n",n);
58     }
59     return 0;
60 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: