NYOJ915——+-字符串
+-字符串
时间限制: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数组中+号个数 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 }
心之所向,素履以往